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比较2个时间大小的实现方法
Apr 10 Python
pandas.loc 选取指定列进行操作的实例
May 18 Python
django加载本地html的方法
May 27 Python
python单例模式获取IP代理的方法详解
Sep 13 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
通过python实现随机交换礼物程序详解
Jul 10 Python
Django数据库操作之save与update的使用
Apr 01 Python
django 利用Q对象与F对象进行查询的实现
May 15 Python
Python 找出英文单词列表(list)中最长单词链
Dec 14 Python
pycharm 如何取消连按两下shift出现的全局搜索
Jan 15 Python
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
Apr 13 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 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
apache+codeigniter 通过.htcaccess做动态二级域名解析
2012/07/01 PHP
基于JQuery+PHP编写砸金蛋中奖程序
2015/09/08 PHP
Joomla实现组件中弹出一个模式(modal)窗口的方法
2016/05/04 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
2011/03/28 Javascript
基于jquery的9行js轻松实现tab控件示例
2013/10/12 Javascript
JavaScript中for-in遍历方式示例介绍
2014/02/11 Javascript
jQuery中trigger()方法用法实例
2015/01/19 Javascript
jQuery简单实现提交数据出现loading进度条的方法
2016/03/29 Javascript
javascript学习笔记_浅谈基础语法,类型,变量
2016/09/19 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
浅谈js停止事件冒泡 阻止浏览器的默认行为(阻止超连接 #)
2017/02/08 Javascript
selenium 与 chrome 进行qq登录并发邮件操作实例详解
2017/04/06 Javascript
JS数组splice操作实例分析
2019/10/12 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
为Python的web框架编写MVC配置来使其运行的教程
2015/04/30 Python
django 发送手机验证码的示例代码
2018/04/25 Python
数据清洗--DataFrame中的空值处理方法
2018/07/03 Python
Python实现的企业粉丝抽奖功能示例
2019/07/26 Python
Python lambda表达式filter、map、reduce函数用法解析
2019/09/11 Python
10个python3常用排序算法详细说明与实例(快速排序,冒泡排序,桶排序,基数排序,堆排序,希尔排序,归并排序,计数排序)
2020/03/17 Python
Python实现给PDF添加水印的方法
2021/01/25 Python
惠普加拿大在线商店:HP加拿大
2017/09/15 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
Delphi软件工程师试题
2013/01/29 面试题
工厂保安员岗位职责
2014/01/31 职场文书
群众路线教育实践活动对照检查材料思想汇报(副处级领导)
2014/10/04 职场文书
工作失职检讨书500字
2014/10/17 职场文书
2014年高一班主任工作总结
2014/12/05 职场文书
三潭印月的导游词
2015/02/12 职场文书
2016开学第一课心得体会
2016/01/23 职场文书
七年级作文(600字3篇)
2019/09/24 职场文书
祝福语集锦:送给闺蜜的生日祝福语
2019/10/08 职场文书
Windows下用Nginx配置https服务器及反向代理的问题
2021/09/25 Servers