在以下代碼中:
contours, h = cv2.findContours(
img_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE
)
print(contours[0].shape)
輸出是:
(299, 1, 2)
第二個值(輪廓的索引 1)代表什么?它總是等于1嗎?
uj5u.com熱心網友回復:
numpy 陣列和 之間的 OpenCV 映射,在cv::Mat
內部和 C 系結中使用。
Acv::Mat
具有寬度和高度以及多個通道。
該形狀(H, W, C)
在兩個方向上都映射到一個 numpy 陣列 shape 。如果 OpenCV 似乎對你給它的一些 numpy 陣列很挑剔,它有助于將資料重塑/轉置為特定的形狀。
按照 OpenCV 約定,任何點串列通常表示為C 通道元素(點)的列向量cv::Mat 。因此形狀變成(N, 1, 2)
當您的 numpy 陣列具有 shape(N, 2)
時,OpenCV 的 Python 系結可能會將其解釋為 N×2 單通道 Mat。大多數/所有 OpenCV API 都隱式接受這種格式作為列向量格式的替代方案。
來自的contours
串列(或元組)findContours
包含一堆 numpy 陣列。每個輪廓將始終具有該(N, 1, 2)
特定輪廓中的許多點的形狀。
您可以呼叫該.squeeze(axis=1)
方法來折疊該額外維度。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/529393.html
標籤:opencv
上一篇:[cv2.filter2D()onPython]:為什么它會回傳這些特定的值?
下一篇:如何驗證一個像素是否高于另一個