簡體   English   中英

使用opencv跟蹤邊界

[英]tracking boundary using opencv

我正在嘗試從以下二進制圖像中順序跟蹤/跟蹤邊界點: 在此處輸入圖片說明

我正在使用OpenCV(python)。 我正在使用三種方式:

  1. 應用Canny邊緣檢測來檢測邊緣。 問題是如何獲得積分順序? 很好,但是很難獲得邊界點的順序
  2. 理想的選擇是檢測二進制圖像上的輪廓。 由於輪廓按順序返回邊界點。 但是openCV等高線方法未檢測到邊界,如結果所示。 為什么會這樣呢?
  3. 檢測Canny邊緣上的輪廓。 仍然缺少一些邊界?

在此處輸入圖片說明

誰能幫我解決OpenCV輪廓的問題嗎? 為什么它沒有追蹤完整的邊界。 我正在檢測輪廓,如下所示:

 contours, hierarchy = cv2.findContours(thresh1,cv2.RETR_TREE ,cv2.CHAIN_APPROX_SIMPLE) 

thresh1是二進制映像

給定您簡單的輪廓,由於不確定嵌套輪廓,因此我不確定您為什么要使用RETR_TREE。 您是否嘗試過使用RETR_EXTERNAL?

從OpenCV文檔:

CV_RETR_TREE檢索所有輪廓,並重建嵌套輪廓的完整層次。

CV_RETR_EXTERNAL僅檢索極端的外部輪廓。

另外,請注意CHAIN_APPROX_SIMPLE 不會枚舉邊界上的所有點,而是會嘗試簡化輪廓,特別是它不會返回多個連續的水平,垂直或對角點。 如果需要所有點,請使用CV_CHAIN_APPROX_NONE,這將強制輪廓算法找到所有邊界點。

CV_CHAIN_APPROX_SIMPLE壓縮水平,垂直和對角線段,僅保留其端點。 例如,一個直立的矩形輪廓編碼有4個點。

CV_CHAIN_APPROX_NONE絕對存儲所有輪廓點。

以下代碼在您的圖像上起作用,並找到132點:

// Load original image as grey scale
Mat image = imread("imagename.png", IMREAD_GRAYSCALE);

vector<vector<Point>> contours;
Mat hierarchy;
findContours(image, contours, hierarchy, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_SIMPLE);

將CV_CHAIN_APPROX_SIMPLE交換為CV_CHAIN_APPROX_NONE會導致返回一個輪廓,並返回737點。

您尚未包括代碼的完整上下文,但是請注意,findContours確實會修改源圖像,因此,如果您使用同一源圖像連續進行多個調用,則可能需要注意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM