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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

OpenCV查找轮廓

發(fā)布時間:2023/11/27 生活经验 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV查找轮廓 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:http://westice.javaeye.com/blog/721225

?

  1. 主要函數(shù)是???????cvFindContours(tour_buf,storage,&contour,sizeof(CvContour),? ??
  2. ????????????????????????????????CV_RETR_EXTERNAL,?CV_CHAIN_APPROX_SIMPLE); ??
  3. ?????????????????tour_buf?是需要查找輪廓的單通道灰度圖像?,storage?是臨時存儲區(qū)?, ??
  4. ?????????????????contour是存儲輪廓點的CvSeq實例, ??
  5. ?????????????????CV_RECT_EXTERNAL?只查找外圍輪廓,還有CV_RECT_TREE? ??
  6. ????????????????? ??
  7. ?????????????????正確調(diào)用查找函數(shù)后,就是從contour提取輪廓點了 ??
  8. ?????????????????contour可能是空指針,提取前最好判斷一下 ??
  9. ?????????????????在提取之前還可以調(diào)用一個函數(shù): ??
  10. ?????????????????contour?=?cvApproxPoly(?contour,?sizeof(CvContour),?storage,?CV_POLY_APPROX_DP,?3,?1?); ??
  11. ?????????????????可能是擬合,有這一句找出的輪廓線更直。 ??
  12. ????????????????? ??
  13. ?????????????????contour里面包含了很多個輪廓,每個輪廓是單獨存放的 ??
  14. ?????????????????要通過一個迭代器遍歷里面每一個輪廓,教程里面都沒提到,還是看了源代碼學來的 ??
  15. ?????????????????CvTreeNodeIterator?iterator; ??
  16. ?????????????????cvInitTreeNodeIterator(&iterator,contour,3); ??
  17. ?????????????????//把所有輪廓的點收集起來 ??
  18. ?????????????????CvSeq*?allpointsSeq?=?cvCreateSeq(CV_SEQ_KIND_GENERIC|CV_32SC2,?sizeof(CvContour), ??
  19. ????????????????????????????????????????????sizeof(CvPoint),?storage); ??
  20. ?????????????????while(?0?!=?(contour?=?(CvSeq*)cvNextTreeNode(&iterator))?){? ??
  21. ?????????????????????//找到一個輪廓就可以用for循環(huán)提取里面的點了 ??
  22. ?????????????????????//這里遍歷CvSeq里面的元素的方法很怪異 ??
  23. ?????????????????????onetourlength?=?contour->total; ??
  24. ?????????????????????//給點數(shù)組分配空間,記得釋放 ??
  25. ?????????????????????CvPoint?*points?=?(CvPoint?*)malloc(sizeof(CvPoint)?*?onetourlength);? ??
  26. ?????????????????????//printf("seqlength:%d/n",seqlength); ??
  27. ?????????????????????CvSeqReader?reader; ??
  28. ?????????????????????CvPoint?pt?=?cvPoint(0,0); ??
  29. ?????????????????????cvStartReadSeq(contour,&reader); ??
  30. ?????????????????????//開始提取 ??
  31. ?????????????????????for(int?i?=?0?;i?<?onetourlength;?i++){ ??
  32. ?????????????????????????CV_READ_SEQ_ELEM(pt,reader); ??
  33. ?????????????????????????points[i]?=?pt; ??
  34. ?????????????????????????cvSeqPush(allpointsSeq,&pt); ??
  35. ?????????????????????}?? ??
  36. ?????????????????????//把這個輪廓點找出后,就可以用這些點畫個封閉線 ??
  37. ?????????????????????cvPolyLine(image,&points,&onetourlength,1,0,CV_RGB(0,255,0),2,8,0); ??
  38. ????????????????????? ??
  39. ?????????????????} ??
  40. ????????????????? ??
  41. ?????????????????//剛剛已經(jīng)畫出了找出的每個輪廓,還收集了所有輪廓點, ??
  42. ?????????????????//因此還可以將這些點用一個圍線包圍起來,即把所有輪廓包圍起來 ??
  43. ?????????????????//這里要用到新的函數(shù) ??
  44. ?????????????????CvSeq*?hull; ??
  45. ?????????????????hull?=?cvConvexHull2(allpointsSeq,0,CV_CLOCKWISE,0); ??
  46. ?????????????????cvConvexHull2返回一個hull對象,里面包含了圍線的點 ??
  47. ?????????????????可以用上面的方法將點取出,然后畫出來

總結(jié)

以上是生活随笔為你收集整理的OpenCV查找轮廓的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

歡迎分享!

轉(zhuǎn)載請說明來源于"生活随笔",并保留原作者的名字。

本文地址:OpenCV查找轮廓