如何以垂直方向旋转所有对象?

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()