如何以垂直方向旋转所有对象?
How to rotate all the object in vertical orientation?
图像中的物体方向不同。我想垂直更改所有对象方向。代码如下所示。代码并不是所有的对象方向都是垂直的。 [Image]
image = cv2.imread(r'C:\Users\Desktop\Sam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# create a binary image
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# find the contours from the binary image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
angle=rect[2]
print('rect',rect)
print('ANgle:',angle)
if angle>0:
rangle = 90-angle
print('rangle:',rangle)
else:
rangle =angle
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle,reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()
要在垂直方向上旋转对象,我们首先需要找到对象的方向。 OpenCV 提供了一个函数 cv2.minAreaRect() 来找到最小面积矩形的中心,(高度,宽度)和旋转角度。高度必须大于宽度才能处于垂直方向。仅旋转角度对于垂直方向是不够的。旋转角度重申-0 至-90 是因为以下原因。此处有更多详细信息:the ai learner and namkeenman
矩形的最低点是第0个顶点,第1、2、3个顶点
顶点顺时针排列。
高度是第 0 和第 1(或第 2 和第 3)顶点之间的距离。
宽度是第 1 个和第 2 个(或第 0 个和第 3 个)顶点之间的距离。
旋转的角度是线(连接起始点和
端点)和水平线。
image = cv2.imread(r'C:\Users\Desktop\Sam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Create a binary threshold image
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# Find the contours from the binary image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
angle=rect[2]
rwidth,rheight=rect[2]
if rheight>rwidth :
rangle = angle
print('rangle:',rangle)
else:
rangle =90-abs(angle)
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle,reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()
图像中的物体方向不同。我想垂直更改所有对象方向。代码如下所示。代码并不是所有的对象方向都是垂直的。 [Image]
image = cv2.imread(r'C:\Users\Desktop\Sam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# create a binary image
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# find the contours from the binary image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
angle=rect[2]
print('rect',rect)
print('ANgle:',angle)
if angle>0:
rangle = 90-angle
print('rangle:',rangle)
else:
rangle =angle
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle,reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()
要在垂直方向上旋转对象,我们首先需要找到对象的方向。 OpenCV 提供了一个函数 cv2.minAreaRect() 来找到最小面积矩形的中心,(高度,宽度)和旋转角度。高度必须大于宽度才能处于垂直方向。仅旋转角度对于垂直方向是不够的。旋转角度重申-0 至-90 是因为以下原因。此处有更多详细信息:the ai learner and namkeenman
矩形的最低点是第0个顶点,第1、2、3个顶点 顶点顺时针排列。
高度是第 0 和第 1(或第 2 和第 3)顶点之间的距离。
宽度是第 1 个和第 2 个(或第 0 个和第 3 个)顶点之间的距离。
旋转的角度是线(连接起始点和 端点)和水平线。
image = cv2.imread(r'C:\Users\Desktop\Sam.jpg')
Gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Create a binary threshold image
_, binary = cv2.threshold(Gray, 127, 255, cv2.THRESH_BINARY_INV)
# Find the contours from the binary image
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
[-2:]
for i in range(len(contours)):
rect = cv2.minAreaRect(contours[i])
angle=rect[2]
rwidth,rheight=rect[2]
if rheight>rwidth :
rangle = angle
print('rangle:',rangle)
else:
rangle =90-abs(angle)
print('rangle:',rangle)
rotate_img= ndimage.rotate(cimg, rangle,reshape=True)
print('rotate_img shape:',rotate_img.shape)
plt.figure(figsize=(8, 8))
plt.title('rotate_img')
plt.imshow(rotate_img, cmap='gray')
plt.show()