Python + OpenCV如何实现图片无损旋转90°且无黑边

  介绍

小编给大家分享一下Python + OpenCV如何实现图片无损旋转90°且无黑边,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获、下面让我们一起去了解一下吧!

<强> 0。引言

 Python + OpenCV如何实现图片无损旋转90°且无黑边

有如上一张图片,在以往的图像旋转处理中,往往得到如图所示的图片。

 Python + OpenCV如何实现图片无损旋转90°且无黑边

然而,在进行一些其他图像处理或者图像展示时,黑边带来了一些不便。本文解决图片旋转后出现黑边的问题,实现了图片尺寸不变的旋转(以上提到的黑边是图片的一部分)。

<强> 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°且无黑边

Python + OpenCV如何实现图片无损旋转90°且无黑边