我想出了如何检测半圆的方向。当我的程序获得轮廓时,我希望它从左到右检索它们,但是,OpenCV将底部的半圆识别为单独的行,并首先计算顶部的半圆,然后计算底部的半圆(如图所示)图片)。
修改
lower = np.array([0, 0, 0])
upper = np.array([15, 15, 15])
shapeMask = cv2.inRange(img, lower, upper)
_, contours, _ = cv2.findContours(shapeMask.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours.reverse()
for cnt in contours:
if len(approx)== 4 or len(approx) == 8:
if(np.array_equal(img[midpoint[1],midpoint[0]],[0, 0, 0])):
#unshaded square
elif(np.array_equal(img[midpoint[1],midpoint[0]],[0, 255, 255])):
#shaded square
elif len(approx) == 3 or (len(approx) >= 14 and len(approx) <= 17):
if(np.array_equal(img[midpoint[1],midpoint[0]],[0, 0, 0])):
#unshaded triangle
elif(np.array_equal(img[midpoint[1],midpoint[0]],[0, 255, 255])):
#shaded triangle
elif len(approx) >= 9 and len(approx) <= 13:
#semicircle
elif len(approx) > 18:
if(np.array_equal(img[midpoint[1],midpoint[0]],[0, 0, 0])):
#shaded circle
elif(np.array_equal(img[midpoint[1],midpoint[0]],[0, 255, 255])):
#unshaded circle
Here is the image 我希望能够区分顶部的半圆和底部的半圆,并首先计算底部,因为它位于顶部的顶部之前