OpenCV - minAreaRect // points 不是数值元组
OpenCV - minAreaRect // points is not a numerical tuple
错误点不是正在输出的数字元组。
# Converting image to a binary image
# ( black and white only image).
blur = cv2.GaussianBlur(img,(5,5),0)
_, threshold = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
print(contours)
minArea = cv2.minAreaRect(contours)
等高线是:
(array([[[747, 305]],
[[746, 306]],
[[745, 306]],
[[744, 307]],
[[743, 308]],
[[743, 309]],
[[744, 310]],
[[744, 311]],
[[744, 312]],
[[744, 313]],
[[757, 306]],
[[756, 306]],
[[755, 306]],
[[754, 306]],
[[753, 306]],
[[752, 305]],
[[751, 305]],
[[750, 305]],
[[749, 305]],
[[748, 305]]], dtype=int32),)
Overload resolution failed:
- points is not a numerical tuple
- Expected Ptr<cv::UMat> for argument 'points'
有什么明显的我做错了吗?
cv2.findContours
returns 等高线列表。每个轮廓都是一个点列表。因此contours
返回的不是点列表,而是点列表的列表。
另一方面,cv2.minAreaRect
需要输入单个点列表,因此当您输入 contours
.
时会出错
您可以通过将 contours
展平为单个点列表来解决它,如下所示:
contours_flat = np.vstack(contours).squeeze()
minArea = cv2.minAreaRect(contours_flat)
或者,您可以通过使用(idx
是轮廓的基于 0 的索引)获得 contours
列表中每个轮廓的 minAreaRect
:
minArea = cv2.minAreaRect(contours[idx])
你可以在这里看到更多关于等高线的信息:Contours, cv::findContours
关于 minAreaRect:cv::minAreaRect
错误点不是正在输出的数字元组。
# Converting image to a binary image
# ( black and white only image).
blur = cv2.GaussianBlur(img,(5,5),0)
_, threshold = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
contours, hierarchy = cv2.findContours(threshold, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
print(contours)
minArea = cv2.minAreaRect(contours)
等高线是:
(array([[[747, 305]],
[[746, 306]],
[[745, 306]],
[[744, 307]],
[[743, 308]],
[[743, 309]],
[[744, 310]],
[[744, 311]],
[[744, 312]],
[[744, 313]],
[[757, 306]],
[[756, 306]],
[[755, 306]],
[[754, 306]],
[[753, 306]],
[[752, 305]],
[[751, 305]],
[[750, 305]],
[[749, 305]],
[[748, 305]]], dtype=int32),)
Overload resolution failed:
- points is not a numerical tuple
- Expected Ptr<cv::UMat> for argument 'points'
有什么明显的我做错了吗?
cv2.findContours
returns 等高线列表。每个轮廓都是一个点列表。因此contours
返回的不是点列表,而是点列表的列表。
cv2.minAreaRect
需要输入单个点列表,因此当您输入 contours
.
您可以通过将 contours
展平为单个点列表来解决它,如下所示:
contours_flat = np.vstack(contours).squeeze()
minArea = cv2.minAreaRect(contours_flat)
或者,您可以通过使用(idx
是轮廓的基于 0 的索引)获得 contours
列表中每个轮廓的 minAreaRect
:
minArea = cv2.minAreaRect(contours[idx])
你可以在这里看到更多关于等高线的信息:Contours, cv::findContours
关于 minAreaRect:cv::minAreaRect