Python+OpenCV 實(shí)現(xiàn)圖片無損旋轉(zhuǎn)90°且無黑邊
0. 引言

有如上一張圖片,在以往的圖像旋轉(zhuǎn)處理中,往往得到如圖所示的圖片。

然而,在進(jìn)行一些其他圖像處理或者圖像展示時(shí),黑邊帶來了一些不便。本文解決圖片旋轉(zhuǎn)后出現(xiàn)黑邊的問題,實(shí)現(xiàn)了圖片尺寸不變的旋轉(zhuǎn)(以上提到的黑邊是圖片的一部分)。
1. 方法流程
(1)旋轉(zhuǎn)圖片,得到有黑邊的旋轉(zhuǎn)圖片。
(2)找出圖片區(qū)域(不含黑邊)的位置。
(3)創(chuàng)建一個(gè)空?qǐng)D片(其實(shí)是矩陣)。
(4)將圖片區(qū)域搬到此空?qǐng)D片。
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表示最終處理獲取的圖片。
運(yùn)行程序,得到如圖所示的圖片,解決了遇到的問題。

3. 總結(jié)
本圖像處理方法用到了以下幾個(gè)重要函數(shù):
cv2.getRotationMatrix2D
cv2.warpAffine
編程過程中,要理清楚圖片各個(gè)像素點(diǎn)的橫縱變化及其變化大小。在進(jìn)行像素傳遞時(shí),要注意對(duì)應(yīng)關(guān)系。
以上這篇Python+OpenCV 實(shí)現(xiàn)圖片無損旋轉(zhuǎn)90°且無黑邊就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python?gravis庫實(shí)現(xiàn)圖形數(shù)據(jù)可視化實(shí)例探索
這篇文章主要為大家介紹了python?gravis庫實(shí)現(xiàn)圖形數(shù)據(jù)可視化實(shí)例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02
Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)
這篇文章主要介紹了Python統(tǒng)計(jì)詞頻并繪制圖片(附完整代碼)本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫的實(shí)現(xiàn)示例
這篇文章主要介紹了Python+Kepler.gl輕松制作酷炫路徑動(dòng)畫的實(shí),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧現(xiàn)示例2020-06-06
樹莓派3 搭建 django 服務(wù)器的實(shí)例
今天小編就為大家分享一篇樹莓派3 搭建 django 服務(wù)器的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-08-08

