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导入oracle数据的方法
Jul 10 Python
利用Python中unittest实现简单的单元测试实例详解
Jan 09 Python
python 简单的绘图工具turtle使用详解
Jun 21 Python
python如何实现不用装饰器实现登陆器小程序
Dec 14 Python
如何更改 pandas dataframe 中两列的位置
Dec 27 Python
Pytorch to(device)用法
Jan 08 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
在jupyter notebook 添加 conda 环境的操作详解
Apr 10 Python
Python ini文件常用操作方法解析
Apr 26 Python
Python 字典一个键对应多个值的方法
Sep 29 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
python3读取文件指定行的三种方法
May 24 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 图像尺寸调整代码
2010/05/26 PHP
使用PHP实现生成HTML静态页面
2015/11/18 PHP
php原生导出excel文件的两种方法(推荐)
2016/11/19 PHP
PHP中__set()实例用法和基础讲解
2019/07/23 PHP
在thinkphp5.0路径中实现去除index.php的方式
2019/10/16 PHP
让innerHTML的脚本也可以运行起来
2006/07/01 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
JavaScript实现节点的删除与序号重建实例
2015/08/05 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
原生JS实现平滑回到顶部组件
2016/03/16 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的方法
2016/11/29 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
canvas实现环形进度条效果
2017/03/23 Javascript
基于BootStrap实现简洁注册界面
2017/07/20 Javascript
Vue条件循环判断+计算属性+绑定样式v-bind的实例
2018/09/18 Javascript
python处理文本文件实现生成指定格式文件的方法
2014/07/31 Python
在Python程序中操作文件之isatty()方法的使用教程
2015/05/24 Python
Python 列表去重去除空字符的例子
2019/07/20 Python
使用python实现哈希表、字典、集合操作
2019/12/22 Python
Python拼接字符串的7种方式详解
2020/03/19 Python
Python3中的f-Strings增强版字符串格式化方法
2020/03/04 Python
基于python生成英文版词云图代码实例
2020/05/16 Python
Alba Moda德国网上商店:意大利时尚女装销售
2016/11/14 全球购物
俄罗斯大型在线书店:Читай-город
2019/10/10 全球购物
茱莉蔻美国官网:Jurlique美国
2020/11/24 全球购物
sealed修饰符是干什么的
2012/10/23 面试题
微信营销策划方案
2014/02/24 职场文书
统计系教授推荐信
2014/02/28 职场文书
员工工作表现评语
2014/04/26 职场文书
大学毕业生推荐信
2014/07/09 职场文书
学生会干部自我鉴定2014
2014/09/18 职场文书
专业技术人员年度考核评语
2014/12/31 职场文书
Python的flask接收前台的ajax的post数据和get数据的方法
2021/04/12 Python
SpringBoot+VUE实现数据表格的实战
2021/08/02 Java/Android