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检测一个对象是否为字符串类的方法
May 21 Python
详解Python中的元组与逻辑运算符
Oct 13 Python
Python发送form-data请求及拼接form-data内容的方法
Mar 05 Python
Python 私有函数的实例详解
Sep 11 Python
200 行python 代码实现 2048 游戏
Jan 12 Python
python的socket编程入门
Jan 29 Python
python破解zip加密文件的方法
May 31 Python
python将控制台输出保存至文件的方法
Jan 07 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
Django Form设置文本框为readonly操作
Jul 03 Python
Python 中数组和数字相乘时的注意事项说明
May 10 Python
Python中json.load()和json.loads()有哪些区别
Jun 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常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
php通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
Yii2 ActiveRecord多表关联及多表关联搜索的实现
2016/06/30 PHP
使用JQuery快速实现Tab的AJAX动态载入(实例讲解)
2013/12/11 Javascript
javascript学习笔记之函数定义
2015/06/25 Javascript
详解AngularJS实现表单验证
2015/12/10 Javascript
jQuery滚动加载图片实现原理
2015/12/14 Javascript
JQuery实现简单的服务器轮询效果实例
2016/03/31 Javascript
js实现select二级联动下拉菜单
2020/04/17 Javascript
Angularjs中的事件广播 —全面解析$broadcast,$emit,$on
2016/05/17 Javascript
浅谈express 中间件机制及实现原理
2017/08/31 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
Vue开发环境跨域访问问题
2020/01/22 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
原生js实现照片墙效果
2020/10/13 Javascript
[37:50]VP vs TNC Supermajor小组赛B组 BO3 第一场 6.2
2018/06/03 DOTA
[06:43]2018DOTA2国际邀请赛寻真——VGJ.Thunder
2018/08/11 DOTA
[01:04:49]KG vs LGD 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
Python之os操作方法(详解)
2017/06/15 Python
Python中int()函数的用法浅析
2017/10/17 Python
Python闭包函数定义与用法分析
2018/07/20 Python
Python3 修改默认环境的方法
2019/02/16 Python
Python 获取 datax 执行结果保存到数据库的方法
2019/07/11 Python
基于Python实现签到脚本过程解析
2019/10/25 Python
Django集成celery发送异步邮件实例
2019/12/17 Python
一文了解python 3 字符串格式化 F-string 用法
2020/03/04 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
巴西图书和电子产品购物网站:Saraiva
2017/06/07 全球购物
泸县召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
新郎结婚保证书
2015/02/26 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
微信小程序实现拍照和相册选取图片
2021/05/09 Javascript
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python