Opencv-contours、minAreaRect测量物体偏转角度(附代码段)

需求目标:检测图像内目标物体的偏转角度

我们要完成所设定的需求目标,我的思路和步骤是这样的:

1.凸显目标

主要方式是使用图像增强等一系列图像处理方法进行调整,使ROI处于较为明显的状态,且没有其余的干扰因素。(不同图像情况不同,不过大同小异,所以没有统一方法,思路是相同的)

2.框住目标

当达到1的要求效果后,使用最小外接矩形将其框住,使用minAreaRect函数。

*重要的是:此时通过findcontours函数可得到对应的轮廓信息点,利用这些点确定最小外接矩形框

画矩形框需要确定其四个顶点,使用boxPoints函数即可得到所需顶点值

特别注意的是得到的值还需要转为int类型。通过for循环结合函数几行代码即可实现:

            for c in contours:
                rect = cv.minAreaRect(c)
                box = cv.boxPoints(rect)

3.画出矩形框

利用drawcontours函数,传入四个坐标,设定RGB颜色值,调整框线的粗细,就可以框出相应的矩形框。

cv.drawContours(img, [box], 0, (0, 0, 255), 3)

4.计算角度

最小外接矩形返回的有4个顶点顺序、中心坐标、宽度、高度、旋转角度,我们的目的是为了得到旋转角度这一项,得到的是角度而不是弧度,需要通过具体的判断得到结果。

theta = cv.minAreaRect(cnt)[2]
theta1 = cv.minAreaRect(cnt)[2]
if abs(theta) <= 45:
   print('图片%s的旋转角度为%s.'% (imgs_list[i] ,theta))
   angle = theta
else:
   print('图片%s的旋转角度为%s.'% (imgs_list[i],str(90 + theta1)))

其中顺时针旋转角度为正,逆时针旋转角度为负。

这样可以完美的得到目标物体的旋转角度,精度也很高。

本人尚才疏学浅,若有错误感谢指正,若有问题亦可与我交流沟通!

你可能感兴趣的:(opencv,图像,Python,opencv,计算机视觉,深度学习)