1. 程式人生 > 程式設計 >Python+OpenCV+圖片旋轉並用原底色填充新四角的例子

Python+OpenCV+圖片旋轉並用原底色填充新四角的例子

我就廢話不多說了,直接上程式碼吧!

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,-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,height_new - 1)]
 for i in seed_points:
 cv2.floodFill(img_rotated,mask,i,filled_color)

 return img_rotated

以上這篇Python+OpenCV+圖片旋轉並用原底色填充新四角的例子就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。