我试图在图像中找到三角形的方向。下面是图片:
这些三角形指向向上/向下/向左/向右。这不是实际图像。我已经使用精明的边缘检测来查找边缘,然后是轮廓,然后放大的图像如下所示。
我找到方向的逻辑:
我想使用的逻辑是在三个角坐标中如果我可以识别三角形的基本坐标(具有相同的横坐标或纵坐标值坐标),我可以制作一个基本向量。然后可以使用单位向量和基向量之间的角度来识别方向。但是这种方法只能判断是上/下还是左/右,而不能区分上下或左右。我试图找到角落,cv2.goodFeaturesToTrack
但据我所知,它只给出了整个图像中最有效的 3 个点。所以我想知道是否有其他方法可以找到三角形的方向。
这是我在 python 中区分三角形/正方形和圆形的代码:
#blue_masking
mask_blue=np.copy(img1)
row,columns=mask_blue.shape
for i in range(0,row):
for j in range(0,columns):
if (mask_blue[i][j]==25):
mask_blue[i][j]=255
else:
mask_blue[i][j]=0
blue_edges = cv2.Canny(mask_blue,10,10)
kernel_blue = cv2.getStructuringElement(cv2.MORPH_ELLIPSE,(2,2))
dilated_blue = cv2.dilate(blue_edges, kernel)
blue_contours,hierarchy =
cv2.findContours(dilated_blue,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
for cnt in blue_contours:
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt,True)
M = cv2.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
if(12<(perimeter*perimeter)/area<14.8):
shape="circle"
elif(14.8<(perimeter*perimeter)/area<18):
shape="squarer"
elif(18<(perimeter*perimeter)/area and area>200):
shape="triangle"
print(shape)
print(area)
print((perimeter*perimeter)/area,"\n")
cv2.imshow('mask_blue',dilated_blue)
cv2.waitKey(0)
cv2.destroyAllWindows()
源图像可以在这里找到:img1
请帮忙,我怎样才能找到三角形的方向?
谢谢你。