我在Python中使用OpenCV来查找图像的轮廓。我使用下面的代码,这似乎是这个任务的标准代码:
cnts = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[1])
字符串
我很难理解这条线的目的:
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
型
代码按预期工作,但为什么需要这一行?
如果我注解掉那一行,只运行上面代码的第一行和第三行,像这样:
cnts = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
#cnts = cnts[0] if len(cnts) == 2 else cnts[1]
cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[1])
型
然后我收到以下错误消息:
error Traceback (most recent call last)
Cell In[56], line 2
1 #cnts = cnts[0] if len(cnts) == 2 else cnts[1]
----> 2 cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[1])
Cell In[56], line 2, in <lambda>(x)
1 #cnts = cnts[0] if len(cnts) == 2 else cnts[1]
----> 2 cnts = sorted(cnts, key=lambda x: cv2.boundingRect(x)[1])
error: OpenCV(4.8.1) :-1: error: (-5:Bad argument) in function 'boundingRect'
> Overload resolution failed:
> - array is not a numerical tuple
> - Expected Ptr<cv::UMat> for argument 'array'
型
1条答案
按热度按时间aor9mmx11#
这是为了使代码能够与版本3.x
cv2
im2, contours, hierarchy = cv2.findContours(
和4.x
contours, hierarchy = cv.findContours(
. Doc一起工作。