当前位置 主页 > 网站技术 > 代码类 >

    Python+OpenCV+图片旋转并用原底色填充新四角的例子

    栏目:代码类 时间:2019-12-12 21:08

    我就废话不多说了,直接上代码吧!

    import cv2
    from math import fabs, sin, cos, radians
    import numpy as np
    from scipy.stats import mode
    
    
    def get_img_rot_broa(img, degree=45, filled_color=-1):
     """
     Desciption:
      Get img rotated a certain degree,
     and use some color to fill 4 corners of the new img.
     """
    
     # 获取旋转后4角的填充色
     if filled_color == -1:
     filled_color = mode([img[0, 0], img[0, -1],
        img[-1, 0], img[-1, -1]]).mode[0]
     if np.array(filled_color).shape[0] == 2:
     if isinstance(filled_color, int):
      filled_color = (filled_color, filled_color, filled_color)
     else:
     filled_color = tuple([int(i) for i in filled_color])
    
     height, width = img.shape[:2]
    
     # 旋转后的尺寸
     height_new = int(width * fabs(sin(radians(degree))) +
       height * fabs(cos(radians(degree))))
     width_new = int(height * fabs(sin(radians(degree))) +
       width * fabs(cos(radians(degree))))
    
     mat_rotation = cv2.getRotationMatrix2D((width / 2, height / 2), degree, 1)
    
     mat_rotation[0, 2] += (width_new - width) / 2
     mat_rotation[1, 2] += (height_new - height) / 2
    
     # Pay attention to the type of elements of filler_color, which should be
     # the int in pure python, instead of those in numpy.
     img_rotated = cv2.warpAffine(img, mat_rotation, (width_new, height_new),
         borderValue=filled_color)
     # 填充四个角
     mask = np.zeros((height_new + 2, width_new + 2), np.uint8)
     mask[:] = 0
     seed_points = [(0, 0), (0, height_new - 1), (width_new - 1, 0),
       (width_new - 1, height_new - 1)]
     for i in seed_points:
     cv2.floodFill(img_rotated, mask, i, filled_color)
    
     return img_rotated

    以上这篇Python+OpenCV+图片旋转并用原底色填充新四角的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持IIS7站长之家。