java opencv 画矩形,使用OpenCV检测简单的几何形状[Java]

I'm programming a Java application that detects simple geometric shapes.

This is some of the code [Python]:

contours,h = cv2.findContours(thresholdedImage,1,2)

for cnt in contours:

approx = cv2.approxPolyDP(cnt,0.01*cv2.arcLength(cnt,True),True)

print len(approx)

if len(approx)==5:

print "pentagon"

cv2.drawContours(img,[cnt],0,255,-1)

elif len(approx)==3:

print "triangle"

cv2.drawContours(img,[cnt],0,(0,255,0),-1)

elif len(approx)==4:

print "square"

cv2.drawContours(img,[cnt],0,(0,0,255),-1)

elif len(approx) == 9:

print "half-circle"

cv2.drawContours(img,[cnt],0,(255,255,0),-1)

elif len(approx) > 15:

print "circle"

cv2.drawContours(img,[cnt],0,(0,255,255),-1)

Using Java's OpenCV methods, I'm unable to extract the "len" (length) property (in order to determine what shape has been detected) of an approximated contour.

Printing out a couple of contours produces [Java]:

[ 4*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x23ac75f0, dataAddr=0x1c7c66c0 ]

[ 5*1*CV_32SC2, isCont=true, isSubmat=false, nativeObj=0x23ac7200, dataAddr=0x1c0e5fc0 ]

etc.

I'd like to get the number of points of a specific contour object -- the 4 and 5 from the code above.

I know I could convert it to a String and then extract the numbers, but there must be a better way, right?

Thanks for your replies.

解决方案

This should do the trick. (Assuming you already have yourImagestored in a MatOfPoint2fobject).

MatOfPoint2f approx = new MatOfPoint2f();

Imgproc.approxPolyDP(yourImage, approx, Imgproc.arcLength(yourImage, true) * 0.02, true);

long count = approx.total();

if (count == 5) {

// this is a pentagon

}

Check this to see the use of total()

OpenCV on Java becomes a bit tricky compared with other languages like Python or C++.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值