Python+OpenCV 實現(xiàn)圖片無損旋轉(zhuǎn)90°且無黑邊
0. 引言
有如上一張圖片,在以往的圖像旋轉(zhuǎn)處理中,往往得到如圖所示的圖片。
然而,在進行一些其他圖像處理或者圖像展示時,黑邊帶來了一些不便。本文解決圖片旋轉(zhuǎn)后出現(xiàn)黑邊的問題,實現(xiàn)了圖片尺寸不變的旋轉(zhuǎn)(以上提到的黑邊是圖片的一部分)。
1. 方法流程
(1)旋轉(zhuǎn)圖片,得到有黑邊的旋轉(zhuǎn)圖片。
(2)找出圖片區(qū)域(不含黑邊)的位置。
(3)創(chuàng)建一個空圖片(其實是矩陣)。
(4)將圖片區(qū)域搬到此空圖片。
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表示旋轉(zhuǎn)后圖片,res表示最終處理獲取的圖片。
運行程序,得到如圖所示的圖片,解決了遇到的問題。
3. 總結(jié)
本圖像處理方法用到了以下幾個重要函數(shù):
cv2.getRotationMatrix2D
cv2.warpAffine
編程過程中,要理清楚圖片各個像素點的橫縱變化及其變化大小。在進行像素傳遞時,要注意對應(yīng)關(guān)系。
以上這篇Python+OpenCV 實現(xiàn)圖片無損旋轉(zhuǎn)90°且無黑邊就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
python?gravis庫實現(xiàn)圖形數(shù)據(jù)可視化實例探索
這篇文章主要為大家介紹了python?gravis庫實現(xiàn)圖形數(shù)據(jù)可視化實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-02-02Python+Kepler.gl輕松制作酷炫路徑動畫的實現(xiàn)示例
這篇文章主要介紹了Python+Kepler.gl輕松制作酷炫路徑動畫的實,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧現(xiàn)示例2020-06-06