如何找到物体(形状)的方向? -Python Opencv [英] How to find the orientation of an object (shape)? - Python Opencv

查看:580
本文介绍了如何找到物体(形状)的方向? -Python Opencv的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的图像始终是这样的:

My images are always like this:

但是我需要旋转它们,使其像这样:

But I need to rotate them to be like this:

但是要做到这一点,我需要确定对象的方向,知道对象的较薄部分必须在左侧. 总之,这些图像是机翼,机翼的起点必须在左侧,机翼的末端必须在右侧.

But to do that, I need to find the orientation of the object, knowing that the thinner part of the object has to be on the left side. In summary, the images are wings and the start of the wing has to be on the left side and the end of the wing has to be on the right side.

我希望有人能给我一个建议,我尝试了很多不同的策略,但到目前为止效果不佳.

I hope someone can give me a suggestion, I've tried a bunch of different strategies but with no good result so far.

推荐答案

这是Python/OpenCV中的一种方法.

Here is one way in Python/OpenCV.

  • 阅读图像

  • Read the image

转换为灰度

阈值

获取外轮廓

从外部轮廓获取minAreaRect点和角度

Get minAreaRect points and angle from outer contour

获取旋转矩形的顶点

绘制旋转的矩形

根据需要校正角度

打印角度

保存带有绘制的旋转矩形的图像

Save the image with the rotated rectangle drawn on it

import cv2
import numpy as np

# load image as HSV and select saturation
img = cv2.imread("wing2.png")
hh, ww, cc = img.shape

# convert to gray
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# threshold the grayscale image
ret, thresh = cv2.threshold(gray,0,255,0)

# find outer contour
cntrs = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cntrs = cntrs[0] if len(cntrs) == 2 else cntrs[1]

# get rotated rectangle from outer contour
rotrect = cv2.minAreaRect(cntrs[0])
box = cv2.boxPoints(rotrect)
box = np.int0(box)

# draw rotated rectangle on copy of img as result
result = img.copy()
cv2.drawContours(result,[box],0,(0,0,255),2)

# get angle from rotated rectangle
angle = rotrect[-1]

# from https://www.pyimagesearch.com/2017/02/20/text-skew-correction-opencv-python/
# the `cv2.minAreaRect` function returns values in the
# range [-90, 0); as the rectangle rotates clockwise the
# returned angle trends to 0 -- in this special case we
# need to add 90 degrees to the angle
if angle < -45:
    angle = -(90 + angle)
 
# otherwise, just take the inverse of the angle to make
# it positive
else:
    angle = -angle

print(angle,"deg")

# write result to disk
cv2.imwrite("wing2_rotrect.png", result)

cv2.imshow("THRESH", thresh)
cv2.imshow("RESULT", result)
cv2.waitKey(0)
cv2.destroyAllWindows()


返回角度:0.8814040422439575度

具有旋转矩形的图像:


Angle Returned: 0.8814040422439575 deg

Image with Rotated Rectangle:

这篇关于如何找到物体(形状)的方向? -Python Opencv的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆