openCV 3 中 contourArea 的兼容性问题

新手上路,请多包涵

我正在尝试对从 findContours 获得的轮廓进行简单的面积计算。我的openCv版本是3.1.0

我的代码是:

 cc = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cv2.contourArea(cc[0])

error: 'C:\\builds\\master_PackSlaveAddon-win32-vc12-static\\opencv\\modules\\imgproc\\src\\shapedescr.cp...: error: (-215) npoints >= 0 && (depth == CV_32F || depth == CV_32S) in function cv::contourArea\n'

似乎无法解决它,我觉得它只是类型转换,尽管我希望 findContours 结果与 contourArea 的类型相匹配

谢谢 :)

编辑:原来我需要接受 findContours 的第二个参数

 im2, cc, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

原文由 YNWA 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 713
2 个回答

在 Opencv 3 API 版本中 cv2.findContours() 返回 3 个 对象

  • 图片
  • 轮廓
  • 等级制度

因此,您需要将语句重写为:

 image, contours, hierarchy = cv2.findContours(im_bw.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

原文由 ZdaR 发布,翻译遵循 CC BY-SA 3.0 许可协议

根据 OpenCV 版本, cv2.findContours() 具有不同的返回签名。

在 OpenCV 3.4.X 中, cv2.findContours() 返回 3 个项目

image, contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

在 OpenCV 2.X 和 4.1.X 中, cv2.findContours() 返回 2 个项目

contours, hierarchy = cv.findContours(image, mode, method[, contours[, hierarchy[, offset]]])

无论版本如何,您都可以轻松获得轮廓:

 cnts = cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]

原文由 nathancy 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题