opencv常用函数备忘

 //显示图片

1 IplImage * src = cvLoadImage("xx.JPG");

2 cvNamedWindow("show_image",1);

3 cvShowImage("show_image",src);

4 cvWaitKey(0);

5 cvReleaseImage(&str);

6 cvDestroyWindow("show_image");

 

 //色彩空间转换,转换类型为CV_BGR2GRAY

1 IplImage* dst = cvCreateImage(cvGetSize(src),src->depth,1);

2 cvCvtColor(src,dst,CV_BGR2GRAY);

3  

 //开、闭、膨胀、腐蚀操作

1 IplConvKernel* element = cvCreateStructuringElementEx(3,3,0,0, CV_SHAPE_ELLIPSE,0);//创建3*3椭圆结构元素 

2 IplImage * temp=cvCreateImage(cvGetSize(pGrayImg), IPL_DEPTH_8U, 1 );

3 cvMorphologyEx(pGrayImg,pGrayImg, temp, element,CV_MOP_CLOSE,1);//闭操作 先膨胀再腐蚀

4 cvMorphologyEx(pGrayImg,pGrayImg, temp, element,CV_MOP_OPEN,1);//开操作 先腐蚀再膨胀

5 cvReleaseStructuringElement(&element);

6 cvReleaseImage(&temp);

7 cvDilate(  pGrayImg, pGrayImg, NULL, 1);//膨胀

8 cvErode( pGrayImg, pGrayImg, NULL, 1);//腐蚀

 

//边缘检测

cvCanny(pGrayImg,pGrayImg, 200, 220, 3 );//边缘检测  

 

 

 

//二值图像中检索轮廓

1 int cvFindContours( CvArr* image, CvMemStorage* storage, CvSeq** first_contour,int header_size=sizeof(CvContour),int mode=CV_RETR_LIST,int method=CV_CHAIN_APPROX_SIMPLE, CvPoint offset=cvPoint(0,0) ); 

http://blog.csdn.net/augusdi/article/details/9000893

 

//二值图像中找圆、椭圆拟合

 1 //椭圆拟合

 2 void my_FitEllipse(CvSeq *pContour, CvBox2D *box_rect)

 3 {

 4     CvMat*p=cvCreateMat(1,pContour->total,CV_32FC2);

 5     CvPoint2D32f *p_temp=(CvPoint2D32f*)(p->data.fl);

 6 

 7     for(int i=0;i<pContour->total;i++)

 8     {

 9         CvPoint*p0=(CvPoint*)cvGetSeqElem(pContour,i);

10         *p_temp=cvPointTo32f(*p0);

11         p_temp++; 

12     }

13     *box_rect  = cvFitEllipse2(p);

14     cvReleaseMat(&p);

15 }

16 

17 /*

18 *功能描述:

19 *   二值图像中找圆形

20 *输入:

21 *    pStrimg - 原图

22 *    vCircle - 圆集合

23 */

24 void findCircle(IplImage *pStrImg, vector<Ccircle> &vCircle)

25 {

26     CvSeq *pContour = NULL;   

27     CvSeq *pConInner = NULL;   

28     CvMemStorage *pStorage = NULL;  

29     IplImage *pTmpImg = cvCreateImage(cvGetSize(pStrImg), pStrImg->depth, pStrImg->nChannels);

30     cvCopy(pStrImg, pTmpImg);

31 

32     // 查找所有轮廓   

33     pStorage = cvCreateMemStorage(0);   

34     cvFindContours(pTmpImg, pStorage, &pContour, sizeof(CvContour), CV_RETR_CCOMP, CV_CHAIN_APPROX_SIMPLE);

35     

36     int wai = 0;  

37     int nei = 0;  

38     for (; pContour != NULL; pContour = pContour->h_next)   

39     {   

40         wai++;  

41         // 内轮廓循环   

42         for (pConInner = pContour->v_next; pConInner != NULL; pConInner = pConInner->h_next)   

43         {   

44             nei++;  

45         }  

46         if(pContour->total < 5)

47         {

48             //TRACE("Number of points should be >= 5\n");

49             continue;

50         }

51         CvBox2D box_rect;

52         my_FitEllipse(pContour, &box_rect);

53         if(fabs(box_rect.size.width - box_rect.size.height) < 1){//椭圆长轴,短轴长度相近时判断为圆

54             Ccircle circle;

55             circle.center.x = box_rect.center.x;

56             circle.center.y = box_rect.center.y;

57             circle.r = (box_rect.size.height + box_rect.size.width) / 4;

58             vCircle.push_back(circle);

59         }

60         //cvEllipseBox(pBinary, box_rect, CV_RGB(255, 255, 255));

61         TRACE("center:%f,%f, w:%f, h:%f\n", box_rect.center.x, box_rect.center.y, box_rect.size.width, box_rect.size.height);

62         

63         //CvRect rect = cvBoundingRect(pContour,0);

64         //cvRectangle(pBinary, cvPoint(rect.x, rect.y), cvPoint(rect.x + rect.width, rect.y + rect.height),CV_RGB(255,255, 255), 1, 8, 0);

65     }   

66     

67     printf("wai = %d, nei = %d", wai, nei);  

68     cvReleaseImage(&pTmpImg);

69     cvReleaseMemStorage(&pStorage);   

70     pStorage = NULL;   

71 

72 }

 

 

//图像上点的访问

 1     uchar*data ;

 2     uchar*ivs_data ;

 3     //IplImage*ivs_image = cvCreateImage(cvGetSize(gray_image),IPL_DEPTH_8U, 1);

 4 

 5     ivs_height    = dst->height;

 6     ivs_width     = dst->width;

 7     ivs_step      = dst->widthStep/sizeof(uchar);

 8     ivs_channel = dst->nChannels;

 9     data   = (uchar*)str->imageData;

10     //printf("Processing a %d X %d image with %d channel!\n",ivs_height,ivs_width,ivs_channel);

11 

12 

13     ivs_data = (uchar*)dst->imageData;

14 

15 

16     // 反色图像

17     for(ivs_i=0;ivs_i<ivs_height;ivs_i++)

18     {

19         for(ivs_j=0;ivs_j<ivs_width;ivs_j++)

20         {

21             for(ivs_k=0;ivs_k<ivs_channel;ivs_k++)

22             {

23                 ivs_data[ivs_i*ivs_step+ivs_j*ivs_channel+ivs_k]=255-data[ivs_i*ivs_step+ivs_j*ivs_channel+ivs_k];

24 

25 

26             }//k

27         }//j

28     }//i

 

你可能感兴趣的:(opencv)