您好,登錄后才能下訂單哦!
小編給大家分享一下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, 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+圖片旋轉并用原底色填充新四角的示例代碼”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。