在OpenCV中,每个轮廓的第二维(索引1)代表什么

kx1ctssn  于 2022-11-15  发布在  其他
关注(0)|答案(1)|浏览(124)

在下列程式码中:

contours, h = cv2.findContours(
    img_bin, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE
)
print(contours[0].shape)

输出为:

(299, 1, 2)

第二个值(等高线的索引1)代表什么?它总是等于1吗?

ttisahbt

ttisahbt1#

OpenCV在numpy数组和cv::Mat之间Map,cv::Mat在内部和C++绑定中使用。
cv::Mat具有宽度和高度以及多个通道。
该形状被Map到一个形状为(H, W, C)的numpy数组,在两个方向上。如果OpenCV对你给予它的某个numpy数组很挑剔,它会帮助你将数据重新整形/转置到那个特定的形状。
根据OpenCV约定,任何点列表通常表示为C通道元素(点)的列向量cv::Mat。因此,形状变为(N, 1, 2)
当numpy数组的形状为(N, 2)时,OpenCV的Python绑定可能会将其解释为N乘2的单通道Mat。大多数/所有OpenCV API都隐式接受这种格式作为列向量格式的替代格式。
来自findContourscontourslist(或tuple)包含了一堆numpy数组。每个轮廓都将始终具有(N, 1, 2)的形状,无论该特定轮廓中有多少点。
您可以呼叫**.squeeze(axis=1)**方法来收合额外的维度。

相关问题