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中的localtime()方法使用详解
May 22 Python
玩转python爬虫之正则表达式
Feb 17 Python
Python中使用platform模块获取系统信息的用法教程
Jul 08 Python
Python解决N阶台阶走法问题的方法分析
Dec 28 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
Python函数any()和all()的用法及区别介绍
Sep 14 Python
Python操作配置文件ini的三种方法讲解
Feb 22 Python
Python实现账号密码输错三次即锁定功能简单示例
Mar 29 Python
详解Python Opencv和PIL读取图像文件的差别
Dec 27 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
记录模型训练时loss值的变化情况
Jun 16 Python
使用Python开发冰球小游戏
Apr 30 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 内存缓存加速功能memcached安装与用法
2009/09/03 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php 类自动载入的方法
2015/06/03 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
Laravel框架源码解析之模型Model原理与用法解析
2020/05/14 PHP
extjs 学习笔记(三) 最基本的grid
2009/10/15 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
jquery实现移动端点击图片查看大图特效
2020/09/11 Javascript
基于jquery实现的仿优酷图片轮播特效代码
2016/01/13 Javascript
JavaScript常用数组算法小结
2016/02/13 Javascript
原生js实现jquery函数animate()动画效果的简单实例
2016/08/21 Javascript
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
基于javascript的异步编程实例详解
2017/04/10 Javascript
Angularjs 双向绑定时字符串的转换成数字类型的问题
2017/06/12 Javascript
js动态引入的四种方法
2018/05/05 Javascript
Vue表单demo v-model双向绑定问题
2018/06/29 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
利用Python的Flask框架来构建一个简单的数字商品支付解决方案
2015/03/31 Python
python编程实现归并排序
2017/04/14 Python
Python解惑之整数比较详解
2017/04/24 Python
Python读取和处理文件后缀为.sqlite的数据文件(实例讲解)
2017/06/27 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
Python numpy 点数组去重的实例
2018/04/18 Python
Django ORM多对多查询方法(自定义第三张表&ManyToManyField)
2019/08/09 Python
python进行参数传递的方法
2020/05/12 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
18-35岁旅游团的全球领导者:Contiki
2017/02/08 全球购物
乌克兰网上服装店:Bolf.ua
2018/10/30 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
2014年采购部工作总结
2014/11/20 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
农村环境卫生倡议书
2015/04/29 职场文书
全新239军机修复记
2022/04/05 无线电