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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
python+pygame简单画板实现代码实例
Dec 13 Python
Python使用MD5加密算法对字符串进行加密操作示例
Mar 30 Python
Python Json模块中dumps、loads、dump、load函数介绍
May 15 Python
python smtplib模块自动收发邮件功能(二)
May 22 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
使用Python中的reduce()函数求积的实例
Jun 28 Python
利用Tensorflow的队列多线程读取数据方式
Feb 05 Python
python 计算概率密度、累计分布、逆函数的例子
Feb 25 Python
Python读取图像并显示灰度图的实现
Dec 01 Python
OpenCV全景图像拼接的实现示例
Jun 05 Python
python热力图实现的完整实例
Jun 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
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
thinkPHP统计排行与分页显示功能示例
2016/12/02 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
2018/04/21 PHP
PHP实现图片压缩
2020/09/09 PHP
php json转换相关知识(小结)
2018/12/21 PHP
javascript parseInt与Number函数的区别
2010/01/21 Javascript
30个最好的jQuery 灯箱插件分享
2011/04/25 Javascript
jquery cookie实现的简单换肤功能适合小网站
2013/08/25 Javascript
js格式化货币数据实现代码
2013/09/04 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
Javascript实现网络监测的方法
2015/07/31 Javascript
教你如何在Node.js中使用jQuery
2016/08/28 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
2020/12/04 Javascript
Python创建文件和追加文件内容实例
2014/10/21 Python
python使用wmi模块获取windows下的系统信息 监控系统
2015/10/27 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
Python 异常处理的实例详解
2017/09/11 Python
Python使用matplotlib的pie函数绘制饼状图功能示例
2018/01/08 Python
python SSH模块登录,远程机执行shell命令实例解析
2018/01/12 Python
详谈python在windows中的文件路径问题
2018/04/28 Python
Django Rest framework频率原理与限制
2019/07/26 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
python统计文章中单词出现次数实例
2020/02/27 Python
pyinstaller打包找不到文件的问题解决
2020/04/15 Python
python能做哪些生活有趣的事情
2020/09/09 Python
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
英国手机零售商:Carphone Warehouse
2018/06/06 全球购物
Java如何调用外部Exe程序
2015/07/04 面试题
机关门卫制度
2014/02/01 职场文书
银行类自荐信
2014/02/04 职场文书
财务支持类个人的自我评价
2014/02/14 职场文书
2014年乡镇领导个人整改措施
2014/09/19 职场文书
抗洪救灾标语
2014/10/08 职场文书
夫妻双方自愿离婚协议书
2014/10/24 职场文书
皇城相府导游词
2015/02/06 职场文书