我有一张照片如下:
我需要找出矩形的数目,每个矩形的中心,测量平行于穿过中心的矩形长边的轴之间的角度,并从水平方向逆时针方向测量角度。我在图像中找到了矩形的数量。我很惊讶地找到了反射的中心和角度。通过瞬间并不能给我正确的答案。
我的代码:
import cv2
import numpy as np
import sys
img = cv2.imread(str(sys.argv[1]),0)
ret,thresh = cv2.threshold(img,127,255,0)
contours,hierarchy = cv2.findContours(thresh,1,2)
for contour in contours:
area = cv2.contourArea(contour)
if area>100000:
contours.remove(contour)
cnt = contours[0]
epsilon = 0.02*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True)
print 'No of rectangles',len(approx)
#finding the centre of the contour
M = cv2.moments(cnt)
cx = int(M['m10']/M['m00'])
cy = int(M['m01']/M['m00'])
print cx,cy
近似值=cv2。近似多边形dp(cnt,epsilon,True)创建给定闭合轮廓的近似多边形。多边形中的线段是可变长度的,这会导致错误的力矩计算,因为它希望从规则网格中采样点,以提供正确的中心。
有三种方法可以解决您的问题:
你可以这样做:
这就是使用openCV的minarealect函数可以实现的方法。它是用C++编写的,但是你可以很容易地适应它,因为几乎只使用OpenCV函数。
导致此图像:
如您所见,角度可能不是您想要的(因为它们随机使用较长或较小的线作为参考)。 相反,您可以提取矩形的长边并手动计算角度。
如果选择旋转矩形的较长边并从中计算角度,则如下所示:
给这个结果,这应该是你要找的!
编辑:看起来op没有使用他发布的输入图像,因为参考矩形中心将位于图像之外。
使用此输入(手动重新缩放,但可能仍然不是最佳的):
我得到这些结果(蓝点是op提供的参考矩形中心):
将参考值与检测值进行比较:
我很想看到真正的输入图像,也许结果会更好。
相关问题 更多 >
编程相关推荐