zoukankan      html  css  js  c++  java
  • 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
    ");
    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
    ", 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!
    ",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
  • 相关阅读:
    USACO 2.1 Hamming Codes
    USACO 2.1 Healthy Holsteins
    USACO 2.1 Sorting a Three-Valued Sequence
    USACO 2.1 Ordered Fractions
    USACO 2.1 The Castle
    USACO 1.5 Superprime Rib
    1145: 零起点学算法52——数组中删数II
    1144: 零起点学算法51——数组中删数
    1143: 零起点学算法50——数组中查找数
    1142: 零起点学算法49——找出数组中最大元素的位置(下标值)
  • 原文地址:https://www.cnblogs.com/zxj015/p/3997408.html
Copyright © 2011-2022 走看看