生活随笔
收集整理的這篇文章主要介紹了
【OpenCV入门指南】第五篇轮廓检测 下
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
上一篇《【OpenCV入門指南】第五篇輪廓檢測上》介紹了cvFindContours函數和cvDrawContours函數,并作了一個簡單的使用示范。本篇將展示一個實例,讓大家對輪廓檢測有個更加深入的認識。
?
代碼如下:
[cpp]?view plaincopy
?? ?? #include?<opencv2/opencv.hpp>?? using?namespace?std;?? #pragma?comment(linker,?"/subsystem:\"windows\"?/entry:\"mainCRTStartup\"")?? IplImage?*g_pGrayImage?=?NULL;?? const?char?*pstrWindowsBinaryTitle?=?"二值圖(http://blog.csdn.net/MoreWindows)";?? const?char?*pstrWindowsOutLineTitle?=?"輪廓圖(http://blog.csdn.net/MoreWindows)";?? CvSeq?*g_pcvSeq?=?NULL;?? ?? void?on_trackbar(int?pos)?? {?? ?????? ????IplImage?*pBinaryImage?=?cvCreateImage(cvGetSize(g_pGrayImage),?IPL_DEPTH_8U,?1);?? ????cvThreshold(g_pGrayImage,?pBinaryImage,?pos,?255,?CV_THRESH_BINARY);?? ?????? ????cvShowImage(pstrWindowsBinaryTitle,?pBinaryImage);?? ?? ????CvMemStorage*?cvMStorage?=?cvCreateMemStorage();?? ?????? ????cvFindContours(pBinaryImage,cvMStorage,?&g_pcvSeq);?? ?? ????IplImage?*pOutlineImage?=?cvCreateImage(cvGetSize(g_pGrayImage),?IPL_DEPTH_8U,?3);?? ????int?_levels?=?5;?? ????cvZero(pOutlineImage);?? ????cvDrawContours(pOutlineImage,?g_pcvSeq,?CV_RGB(255,0,0),?CV_RGB(0,255,0),?_levels);?? ????cvShowImage(pstrWindowsOutLineTitle,?pOutlineImage);?? ?? ????cvReleaseMemStorage(&cvMStorage);?? ????cvReleaseImage(&pBinaryImage);?? ????cvReleaseImage(&pOutlineImage);?? }?? ?? int?main(?int?argc,?char**?argv?)?? {????? ????const?char?*pstrWindowsSrcTitle?=?"原圖(http://blog.csdn.net/MoreWindows)";?? ????const?char?*pstrWindowsToolBarName?=?"二值化";?? ?? ?????? ????IplImage?*pSrcImage?=?cvLoadImage("003.jpg",?CV_LOAD_IMAGE_UNCHANGED);?? ?????? ????cvNamedWindow(pstrWindowsSrcTitle,?CV_WINDOW_AUTOSIZE);?? ????cvShowImage(pstrWindowsSrcTitle,?pSrcImage);?? ?? ?????? ????g_pGrayImage?=??cvCreateImage(cvGetSize(pSrcImage),?IPL_DEPTH_8U,?1);?? ????cvCvtColor(pSrcImage,?g_pGrayImage,?CV_BGR2GRAY);?? ?? ?????? ????cvNamedWindow(pstrWindowsBinaryTitle,?CV_WINDOW_AUTOSIZE);?? ????cvNamedWindow(pstrWindowsOutLineTitle,?CV_WINDOW_AUTOSIZE);?? ?? ?? ?????? ????int?nThreshold?=?0;?? ????cvCreateTrackbar(pstrWindowsToolBarName,?pstrWindowsBinaryTitle,?&nThreshold,?254,?on_trackbar);?? ?? ????on_trackbar(1);?? ?? ????cvWaitKey(0);?? ?? ????cvDestroyWindow(pstrWindowsSrcTitle);?? ????cvDestroyWindow(pstrWindowsBinaryTitle);?? ????cvDestroyWindow(pstrWindowsOutLineTitle);?? ????cvReleaseImage(&pSrcImage);?? ????cvReleaseImage(&g_pGrayImage);?? ????return?0;?? }??
程序運行結果如下所示:
可以明顯看出,由于圖像的二值化處理只是根據圖像中單個像素的值來決定,因此這種最簡單輪廓檢測所產生的結果和人眼觀測的實際感覺肯定是有比較大的區別的。
?
輪廓檢測另外還有一個重要的函數cvApproxPoly,它的函數原型如下所示
CVAPI(CvSeq*)??cvApproxPoly(
? const?void*?src_seq,
? int?header_size,
? CvMemStorage*?storage,
? int?method,
? double?parameter,
? int?parameter2?CV_DEFAULT(0)
);
由于篇幅問題,對于cvApproxPoly函數就不細講了,有興趣的讀者可以參考下面這一篇博客:http://blog.csdn.net/bruce_zeng/article/details/8074253
?
?
《OpenCV入門指南》系列文章地址:http://blog.csdn.net/morewindows/article/category/863841
轉載請標明出處,原文地址:http://blog.csdn.net/morewindows/article/details/8253174
歡迎關注微博:http://weibo.com/MoreWindows
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的【OpenCV入门指南】第五篇轮廓检测 下的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。