介绍
小编给大家分享一下Python + OpenCV如何实现图片无损旋转90°且无黑边,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!
<强> 0。引言强>
有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片。
然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便。本文解决图片旋转后出现黑边的问题,实现了图片尺寸不变的旋转(以上提到的黑边是图片的一部分)。
<强> 1。方法流程强>
(1)旋转图片,得到有黑边的旋转图片。
(2)找出图片区域(不含黑边)的位置。
(3)创建一个空图片(其实是矩阵)。
(4)将图片区域搬到此空图片。
<强> 2。程序强>
# !/usr/bin/python #,- *安康;编码:UTF-8 - * - “““ 却,能够program is  debugged by  Harden 秋。 你还要send a  e-mail 用hardenqiu@foxmail.com for more 细节。 “““ import numpy  as np import cv2 def main (): img 才能=,cv2.imread(& # 39;。\ \一个\ \ img10.jpg& # 39;) 高度,才能,width =, img.shape (2): matRotate 才能=,cv2.getRotationMatrix2D ((height 0.5 *,,, width *, 0.5),, -90,, 1) 时间=dst 才能;cv2.warpAffine (img, matRotate,,(宽度,高度* 2)) 行,才能,cols =, dst.shape (2): for 才能;col 拷贝范围(0,coles): ,,,if dst(:,,坳).any (): ,,,,,left =坳 ,,,,,休息 for 才能;col 拷贝范围(cols-1, 0, 1): ,,,if dst(:,,坳).any (): ,,,,,right =坳 ,,,,,休息 for 才能;row 拷贝范围(0,,行): ,,,if dst[行:].any (): ,,,,,up =,行 ,,,,,休息 for 才能;row 拷贝范围(rows-1 0 1): ,,,if dst[行:].any (): ,,,,,down =,行 ,,,,,休息=res_widths 才能;abs (right 安康;左)=res_heights 才能;abs (down 安康) res 才能=,np.zeros ([res_widths res_heights ,, 3],, np.uint8) for 才能;res_width 拷贝范围(res_widths): ,,,for res_height 拷贝范围(res_heights): ,,,,,res (res_height, res_width],=, dst [+ res_height,,左+ res_width] cv2.imshow才能(& # 39;res # 39; (res) cv2.imshow才能(& # 39;img # 39;, img) cv2.imshow才能(& # 39;dst # 39;,, dst) cv2.waitKey才能(0) if __name__ ==& # 39; __main__ # 39;: 以前,,main () >说明:img表示原图,dst表示旋转后图片,res表示最终处理获取的图片。
运行程序,得到如图所示的图片,解决了遇到的问题。
Python + OpenCV如何实现图片无损旋转90°且无黑边