I'm programming a Java application that detects simple geometric shapes.
The following Python code is used as a reference: How to detect simple geometric shapes using OpenCV
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.