Python+OpenCV 實現圖片無損旋轉90°且無黑邊
阿新 • • 發佈:2020-01-09
0. 引言
有如上一張圖片,在以往的影象旋轉處理中,往往得到如圖所示的圖片。
然而,在進行一些其他影象處理或者影象展示時,黑邊帶來了一些不便。本文解決圖片旋轉後出現黑邊的問題,實現了圖片尺寸不變的旋轉(以上提到的黑邊是圖片的一部分)。
1. 方法流程
(1)旋轉圖片,得到有黑邊的旋轉圖片。
(2)找出圖片區域(不含黑邊)的位置。
(3)建立一個空圖片(其實是矩陣)。
(4)將圖片區域搬到此空圖片。
2. 程式
#!/usr/bin/python # -*- coding: UTF-8 -*- """ This program is debugged by Harden Qiu. You can send a e-mail to [email protected] for more details. """ import numpy as np import cv2 def main(): img = cv2.imread('.\\imgs\\img10.jpg') height,width = img.shape[:2] matRotate = cv2.getRotationMatrix2D((height * 0.5,width * 0.5),-90,1) dst = cv2.warpAffine(img,matRotate,(width,height*2)) rows,cols = dst.shape[:2] for col in range(0,cols): if dst[:,col].any(): left = col break for col in range(cols-1,-1): if dst[:,col].any(): right = col break for row in range(0,rows): if dst[row,:].any(): up = row break for row in range(rows-1,-1): if dst[row,:].any(): down = row break res_widths = abs(right - left) res_heights = abs(down - up) res = np.zeros([res_heights,res_widths,3],np.uint8) for res_width in range(res_widths): for res_height in range(res_heights): res[res_height,res_width] = dst[up+res_height,left+res_width] cv2.imshow('res',res) cv2.imshow('img',img) cv2.imshow('dst',dst) cv2.waitKey(0) if __name__ =='__main__': main()
說明:img表示原圖,dst表示旋轉後圖片,res表示最終處理獲取的圖片。
執行程式,得到如圖所示的圖片,解決了遇到的問題。
3. 總結
本影象處理方法用到了以下幾個重要函式:
cv2.getRotationMatrix2D
cv2.warpAffine
程式設計過程中,要理清楚圖片各個畫素點的橫縱變化及其變化大小。在進行畫素傳遞時,要注意對應關係。
以上這篇Python+OpenCV 實現圖片無損旋轉90°且無黑邊就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。