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

 更新时间:2019年12月12日 15:28:36   作者:FistQ  
今天小编就为大家分享一篇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表示最终处理获取的图片。

运行程序,得到如图所示的图片,解决了遇到的问题。

3. 总结

本图像处理方法用到了以下几个重要函数:

cv2.getRotationMatrix2D

cv2.warpAffine

编程过程中,要理清楚图片各个像素点的横纵变化及其变化大小。在进行像素传递时,要注意对应关系。

以上这篇Python+OpenCV 实现图片无损旋转90°且无黑边就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 关于pycharm找不到MySQLdb模块的解决方法

    关于pycharm找不到MySQLdb模块的解决方法

    MySQLdb是用于Python链接Mysql数据库的接口,它实现了Python数据库API规范V2.0,基于MySql C API上建立的,本文给大家介绍pycharm找不到MySQLdb模块解决方法,需要的朋友参考下吧
    2021-06-06
  • 如何基于python实现年会抽奖工具

    如何基于python实现年会抽奖工具

    这篇文章主要介绍了如何基于python实现年会抽奖工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • pandas DataFrame 警告(SettingWithCopyWarning)的解决

    pandas DataFrame 警告(SettingWithCopyWarning)的解决

    这篇文章主要介绍了pandas DataFrame 警告(SettingWithCopyWarning)的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Python 异步协程函数原理及实例详解

    Python 异步协程函数原理及实例详解

    这篇文章主要介绍了Python 异步协程函数原理及实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-11-11
  • Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析

    Python动态导入模块:__import__、importlib、动态导入的使用场景实例分析

    这篇文章主要介绍了Python动态导入模块:__import__、importlib、动态导入的使用场景,结合实例形式分析了Python动态导入模块__import__、importlib基本概念、原理及动态导入的具体应用操作技巧,需要的朋友可以参考下
    2020-03-03
  • 浅析PyTorch中nn.Module的使用

    浅析PyTorch中nn.Module的使用

    这篇文章主要介绍了浅析PyTorch中nn.Module的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-08-08
  • 初学python的操作难点总结(新手必看篇)

    初学python的操作难点总结(新手必看篇)

    下面小编就为大家带来一篇初学python的操作难点总结(新手必看篇)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • Pycharm 实现下一个文件引用另外一个文件的方法

    Pycharm 实现下一个文件引用另外一个文件的方法

    今天小编就为大家分享一篇Pycharm 实现下一个文件引用另外一个文件的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • pytorch使用指定GPU训练的实例

    pytorch使用指定GPU训练的实例

    今天小编就为大家分享一篇pytorch使用指定GPU训练的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • 浅谈怎么给Python添加类型标注

    浅谈怎么给Python添加类型标注

    今天给大家带来的文章是Python的相关知识,文章围绕着怎么给Python添加类型标注展开,文中有非常详细的介绍,需要的朋友可以参考下
    2021-06-06

最新评论