您好,登錄后才能下訂單哦!
小編給大家分享一下Python+OpenCV如何實現圖片無損旋轉90°且無黑邊,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
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 hardenqiu@foxmail.com 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, 0, -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,0,-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表示最終處理獲取的圖片。
運行程序,得到如圖所示的圖片,解決了遇到的問題。
以上是“Python+OpenCV如何實現圖片無損旋轉90°且無黑邊”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。