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


Posted in Python onDecember 12, 2019

0. 引言

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

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

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

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

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表示最终处理获取的图片。

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

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

3. 总结

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

cv2.getRotationMatrix2D

cv2.warpAffine

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

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

Python 相关文章推荐
python操作日期和时间的方法
Mar 11 Python
Python实现的石头剪子布代码分享
Aug 22 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
Python中序列的修改、散列与切片详解
Aug 27 Python
使用pytorch进行图像的顺序读取方法
Jul 27 Python
Django ORM 聚合查询和分组查询实现详解
Aug 09 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
Aug 17 Python
Python3.7 pyodbc完美配置访问access数据库
Oct 03 Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 Python
python将数据插入数据库的代码分享
Aug 16 Python
Windows环境下Python3.6.8 importError: DLLload failed:找不到指定的模块
Nov 01 Python
Python装饰器详细介绍
Mar 25 Python
使用python去除图片白色像素的实例
Dec 12 #Python
用Python去除图像的黑色或白色背景实例
Dec 12 #Python
python 实现将小图片放到另一个较大的白色或黑色背景图片中
Dec 12 #Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 #Python
python实现批量处理将图片粘贴到另一张图片上并保存
Dec 12 #Python
Python FtpLib模块应用操作详解
Dec 12 #Python
Python PyInstaller库基本使用方法分析
Dec 12 #Python
You might like
PHP中ob_start函数的使用说明
2013/11/11 PHP
PHP递归实现文件夹的复制、删除、查看大小操作示例
2017/08/11 PHP
JS控件autocomplete 0.11演示及下载 1月5日已更新
2007/01/09 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
在网站上应该用的30个jQuery插件整理
2011/11/03 Javascript
IE6浏览器下resize事件被执行了多次解决方法
2012/12/11 Javascript
ExtJs默认的字体大小改变的几种方法(自己整理)
2013/04/18 Javascript
extjs中form与grid交互数据(record)的方法
2013/08/29 Javascript
javascript中的变量作用域以及变量提升详细介绍
2013/10/24 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript在Android的WebView中parseInt函数转换不正确问题解决方法
2015/04/25 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
bootstrap datepicker限定可选时间范围实现方法
2016/09/28 Javascript
Vue.js 和 MVVM 的注意事项
2016/11/07 Javascript
原生js实现倒计时--2018
2017/02/21 Javascript
详解angularJS+Ionic移动端图片上传的解决办法
2017/09/13 Javascript
javascript基于牛顿迭代法实现求浮点数的平方根【递归原理】
2017/09/28 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
详解python中的 is 操作符
2017/12/26 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
浅谈python实现Google翻译PDF,解决换行的问题
2018/11/28 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
TensorFlow 读取CSV数据的实例
2020/02/05 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
Html5移动端弹幕动画实现示例代码
2018/08/27 HTML / CSS
amazeui 验证按钮扩展的实现
2020/08/21 HTML / CSS
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
毕业研究生的自我鉴定
2013/11/30 职场文书
大二学期个人自我评价
2014/01/13 职场文书
茶叶店创业计划书范文
2014/01/19 职场文书
火锅店营销方案
2014/02/26 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
Oracle更换为MySQL遇到的问题及解决
2021/05/21 Oracle