日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【OpenCV入门指南】第五篇轮廓检测 下

發布時間:2025/5/22 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV入门指南】第五篇轮廓检测 下 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上一篇《【OpenCV入門指南】第五篇輪廓檢測上》介紹了cvFindContours函數和cvDrawContours函數,并作了一個簡單的使用示范。本篇將展示一個實例,讓大家對輪廓檢測有個更加深入的認識。

?

代碼如下:

[cpp]?view plaincopy
  • //圖像的輪廓檢測下??
  • //By?MoreWindows?(http://blog.csdn.net/MoreWindows)??
  • #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入门指南】第五篇轮廓检测 下的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。