python opencv 轮廓检测,使用python在opencv中检查轮廓区域

I try to use checkContour() function in new python api (cv2) and it do works if I create contours to be checked using findContours e.g.

contours, hierarchy = cv2.findContours(imgGray, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

cv2.contourArea(contours[0])

however when I create contour on my own the following code doesn't work

contour = numpy.array([[0,0], [10,0], [10,10], [5,4]])

area = cv2.contourArea(contour)

and returns "error: (-215) contour.checkVector(2) >= 0 && (contour.depth() == CV_32F || contour.depth() == CV_32S) in function contourArea"

when I change to

contour = numpy.array([[0,0], [10,0], [10,10], [5,4]], dtype=numpy.int32)

I got "error: (-210) The matrix can not be converted to point sequence because of inappropriate element type in function cvPointSeqFromMat"

How to make the following code in C++ from documentation

vector contour;

contour.push_back(Point2f(0, 0));

contour.push_back(Point2f(10, 0));

contour.push_back(Point2f(10, 10));

contour.push_back(Point2f(5, 4));

double area0 = contourArea(contour);

work in latest python API (2.3)?

解决方案

This one should work:

contour = numpy.array([[[0,0]], [[10,0]], [[10,10]], [[5,4]]])

area = cv2.contourArea(contour)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值