Dec 05 2009

Edge orientation

Category: OpenCVKristou Mehrez @ 7:31 pm

This is a sample code for getting the edges orientation in an image.

CvMat *filter_x=cvCreateMat(1,3,CV_32FC1); filter_x->data.fl[0]=-1;
filter_x->data.fl[1]=0; filter_x->data.fl[2]=1;
CvMat *filter_y=cvCreateMat(3,1,CV_32FC1); filter_y->data.fl[0]=-1;
filter_y->data.fl[1]=0; filter_y->data.fl[2]=1;

IplImage *img_src=cvLoadImage("name",0);

IplImage *img_diff_x=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_32F,1);
IplImage *img_diff_y=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_32F,1);

IplImage *img_32f=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_32F,1);

cvConvert(img_src,img_32f);

cvFilter2D(img_32f,filter_x,img_diff_x);
cvFilter2D(img_32f,filter_y,img_diff_y);

IplImage *magnitude=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_32F,1);
IplImage *orientation=cvCreateImage(cvGetSize(img_src),IPL_DEPTH_32F,1);

cvCartToPolar(img_diff_x, img_diff_y, magnitude, orientation, 1);


Nov 26 2009

Convert Polar image into Cartesian

Category: OpenCVKristou Mehrez @ 1:27 am

This a simple implementation of Polar to Cartesian transformation applied to the image case. It is useful to unroll an omni image to convert it to panoramic image.

imgPol = cvCreateImage(cvSize(2*CV_PI*RadiusMax,RadiusMax-RadiusMin),IPL_DEPTH_8U,1);
cvSet(imgPol,CV_WHITE,NULL);
int x0,y0;
double Radius;
double Angle;
for(int x=1; x < imgPol->width; x++)
{
	for(int y=1; y < imgPol->height; y++)
	{
		Radius = RadiusMin + y;
		Angle = 2 * CV_PI * x / imgPol->width;
		x0 = cvRound(CenterX + Radius * cos(Angle));
		y0 = cvRound(CenterY + Radius * sin(Angle));

		cvSet2D(imgPol, y, x, cvGet2D(imgBase,y0,x0));
	}
}

cvSaveImage("imgPol.bmp",imgPol);


Nov 18 2009

Closing gaps in image

Category: OpenCVKristou Mehrez @ 11:42 pm

This an example on how to use morphological operator in OpenCV to close gaps.

int main(int argc, char* argv[])
{
IplImage *image;
IplImage *dilated_image;
IplImage *eroded_image;
image = cvLoadImage ("triangle.jpg");

dilated_image = cvCloneImage (image);
eroded_image = cvCloneImage (image);

cvNamedWindow ("Original", 1);
cvNamedWindow ("Dilated", 1);
cvNamedWindow ("Eroded", 1);

cvShowImage ("Original", image);

cvDilate (image, dilated_image, 0, 7);
cvShowImage ("Dilated", dilated_image);

cvErode (dilated_image, eroded_image, 0, 6);
cvShowImage ("Eroded", eroded_image);

cvWaitKey ();

cvReleaseImage (&image);
cvDestroyWindow ("Original");
cvReleaseImage (&dilated_image);
cvDestroyWindow ("Dilated");
cvReleaseImage (&eroded_image);
cvDestroyWindow ("Eroded");

return 0;
}


Nov 16 2009

Circle detection

Category: OpenCVKristou Mehrez @ 9:54 pm

This a source code for sircle detection.

void findCircles( IplImage* img, CvMemStorage* storage ){
CvSeq* circles;
IplImage* cpy = cvCreateImage(cvGetSize(img),8,1);
int i;
float* circ;
cvCvtColor(img,cpy,CV_RGB2GRAY);
circles =
cvHoughCircles(cpy,storage,CV_HOUGH_GRADIENT,2,cpy->height/4,200,100);
for(i=0;i < circles->total;i++){
CvSeq
circ=(float*)cvGetSeqElem(circles,i);

cvCircle(img,cvPoint(cvRound(circ[0]),cvRound(circ[1])),cvRound(circ[2]),CV_RGB(255,255,255),1,8,0);
}
cvReleaseImage(&cpy);

}


Nov 07 2009

OpenCV: Accessing Pixels

Category: OpenCVKristou Mehrez @ 12:34 am

In order to access pixels, there is some ways to do that, for example:

uchar *ptr;

ptr = cvPtr2D (image, x, y);

// for 3 channels image
ptr[0] = 255; // blue
ptr[1] = 0; // red
ptr[2] = 0; // green
ptr[3] = 0; // alpha

the example above you will color your image to Blue. the same way you can read the value as:

BlueValue = ptr[0];
RedValue = ptr[1];
etc….

hope it helps somebody.


Next Page »