?//顯示圖片
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
?
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
