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服务器与android客户端socket通信实例
Nov 12 Python
python中os操作文件及文件路径实例汇总
Jan 15 Python
Django Admin实现上传图片校验功能
Mar 06 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
python和pygame实现简单俄罗斯方块游戏
Feb 19 Python
python字典值排序并取出前n个key值的方法
Oct 17 Python
Python @property装饰器原理解析
Jan 22 Python
pycharm工具连接mysql数据库失败问题
Apr 01 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
Python类class参数self原理解析
Nov 19 Python
matplotlib实现数据实时刷新的示例代码
Jan 05 Python
Python实现数据的序列化操作详解
Jul 07 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基础知识:类与对象(2) 自动加载对象
2006/12/13 PHP
修改PHP的memory_limit限制的方法分享
2012/02/21 PHP
推荐25款php中非常有用的类库
2014/09/29 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
PHP基于mcript扩展实现对称加密功能示例
2019/02/21 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
2020/02/23 PHP
node.js中的path.delimiter方法使用说明
2014/12/09 Javascript
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
从对象列表中获取一个对象的方法,依据关键字和值
2017/09/20 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
解决npm管理员身份install时出现权限的问题
2018/03/16 Javascript
es6基础学习之解构赋值
2018/12/10 Javascript
vue路由 遍历生成复数router-link的例子
2019/10/30 Javascript
Python实现XML文件解析的示例代码
2018/02/05 Python
Python读取Word(.docx)正文信息的方法
2018/03/15 Python
pandas数据预处理之dataframe的groupby操作方法
2018/04/13 Python
Python 实现微信防撤回功能
2019/04/29 Python
Python实现计算对象的内存大小示例
2019/07/10 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
详解python tkinter 图片插入问题
2020/09/03 Python
python3中确保枚举值代码分析
2020/12/02 Python
CSS3只让背景图片旋转180度的实现示例
2021/03/09 HTML / CSS
HTML5制作3D爱心动画教程 献给女友浪漫的礼物
2014/11/05 HTML / CSS
施工人员岗位职责
2013/12/12 职场文书
成功的餐厅经营创业计划书
2014/01/15 职场文书
单位创先争优活动方案
2014/01/26 职场文书
主持词开场白
2014/03/17 职场文书
中专毕业生的自荐书
2014/07/01 职场文书
新学期开学标语2015
2015/07/16 职场文书
2015年秋季运动会前导词
2015/07/20 职场文书
2015年中学图书馆工作总结
2015/07/22 职场文书
nginx反向代理时如何保持长连接
2021/03/31 Servers
Oracle锁表解决方法的详细记录
2022/06/05 Oracle