歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> OpenCV函數cvFindContous提取圖像輪廓

OpenCV函數cvFindContous提取圖像輪廓

日期:2017/3/1 9:43:49   编辑:Linux編程

Opencv中提供了很多關於圖像輪廓處理的函數,這裡我用cvFindContours函數來提取輪廓,並用cvDrawContours函數將提取的輪廓畫出來。函數cvFindContours的第一個參數就是我們要進行提取輪廓的目標圖像,這裡要注意,這個圖像必須是一個二值圖。得到二值圖的方法有很多,這裡我采用的是cvThreshold函數,通過設置閥值來得到相應的二值圖。當然,這裡閥值的選擇根據不同的圖像可以自己適當的調整,這樣效果就比較好了!

下面是源碼:

#include<cv.h>
#include<highgui.h>

int main()
{
IplImage* src = NULL;
IplImage* img = NULL;
IplImage* dst = NULL;

CvMemStorage* storage = cvCreateMemStorage (0);;
CvSeq* contour = 0;
int contours = 0;
CvScalar external_color;
CvScalar hole_color;

src = cvLoadImage ("test.jpg", 1);
img = cvCreateImage (cvGetSize(src), IPL_DEPTH_8U, 1);
dst = cvCreateImage (cvGetSize(src), src->depth, src->nChannels);

cvCvtColor (src, img, CV_BGR2GRAY);
cvThreshold (img, img, 100, 200, CV_THRESH_BINARY);
contours = cvFindContours (img, storage, &contour, sizeof(CvContour), CV_RETR_LIST, CV_CHAIN_APPROX_NONE);

for (;contour != 0; contour = contour->h_next)
{
external_color = CV_RGB(rand()&255, rand()&255, rand()&255);
hole_color = CV_RGB(rand()&255, rand()&255, rand()&255);
cvDrawContours (dst, contour, external_color, hole_color, 1, 2, 8);
}

cvNamedWindow ("Contour", 1);
cvShowImage ("Contour", dst);

cvWaitKey (0);

cvReleaseMemStorage (&storage);
cvReleaseImage (&src);
cvReleaseImage (&img);
cvReleaseImage (&dst);

return 0;
}

源圖: 運行結果圖:

Objective-C中@property的所有屬性詳解 http://www.linuxidc.com/Linux/2014-03/97744.htm

Objective-C 和 Core Foundation 對象相互轉換的內存管理總結 http://www.linuxidc.com/Linux/2014-03/97626.htm

使用 Objective-C 一年後我對它的看法 http://www.linuxidc.com/Linux/2013-12/94309.htm

10個Objective-C基礎面試題,iOS面試必備 http://www.linuxidc.com/Linux/2013-07/87393.htm

Objective-C適用C數學函數 <math.h> http://www.linuxidc.com/Linux/2013-06/86215.htm

Copyright © Linux教程網 All Rights Reserved