Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)


Posted in Python onMay 13, 2019

前言

总结一下最近看的关于opencv图像几何变换的一些笔记.

这是原图:

Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

1.平移

import cv2
import numpy as np

img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]

dst = np.zeros(imgInfo, np.uint8)

for i in range( height ):
  for j in range( width - 100 ):
    dst[i, j + 100] = img[i, j]

cv2.imshow('image', dst)
cv2.waitKey(0)

demo很简单,就是将图像向右平移了100个像素.如图:

Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

2.镜像

import cv2
import numpy as np


img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]

dst = np.zeros([height*2, width, deep], np.uint8)

for i in range( height ):
  for j in range( width ):
    dst[i,j] = img[i,j]
    dst[height*2-i-1,j] = img[i,j]

for i in range(width):
  dst[height, i] = (0, 0, 255)
cv2.imshow('image', dst)
cv2.waitKey(0)

demo生成一个如下效果:

Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

3.缩放

import cv2
img = cv2.imread("image0.jpg", 1)
imgInfo = img.shape
print( imgInfo )
height = imgInfo[0]
width = imgInfo[1]
mode = imgInfo[2]

# 1 放大 缩小 2 等比例 非等比例
dstHeight = int(height * 0.5)
dstWeight = int(width * 0.5)

# 最近邻域插值 双线性插值 像素关系重采样 立方插值
dst = cv2.resize(img, (dstWeight,dstHeight))
print(dst.shape)
cv2.imshow('image', dst)
cv2.waitKey(0)

使用resize直接进行缩放操作,同时还可以使用邻域插值法进行缩放,代码如下:

# 1 info 2 空白模板 3 重新计算x, y
import cv2
import numpy as np
img = cv2.imread('image0.jpg', 1)
imgInfo = img.shape # 先高度,后宽度
height = imgInfo[0]
width = imgInfo[1]
dstHeight = int(height/2)
dstWidth = int(width/2)

dstImage = np.zeros([dstHeight, dstWidth, 3], np.uint8)
for i in range( dstHeight ):
  for j in range(dstWidth):
    iNew = i * ( height * 1.0 / dstHeight )
    jNew = j * ( width * 1.0 / dstWidth )

    dstImage[i,j] = img[int(iNew),int(jNew)]

cv2.imshow('image', dstImage)
cv2.waitKey(0)

4.旋转

import cv2

img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]

# 定义一个旋转矩阵
matRotate = cv2.getRotationMatrix2D((height*0.5, width*0.5), 45, 0.7) # mat rotate 1 center 2 angle 3 缩放系数

dst = cv2.warpAffine(img, matRotate, (height, width))

cv2.imshow('image',dst)
cv2.waitKey(0)

旋转需要先定义一个旋转矩阵,cv2.getRotationMatrix2D(),参数1:需要旋转的中心点.参数2:需要旋转的角度.参数三:需要缩放的比例.效果如下图:

Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

5.仿射

import cv2
import numpy as np

img = cv2.imread('image0.jpg', 1)
cv2.imshow('src', img)
imgInfo = img.shape
height= imgInfo[0]
width = imgInfo[1]
deep = imgInfo[2]
# src 3 -> dst 3 (左上角, 左下角,右上角)
matSrc = np.float32([[0,0],[0,height-1],[width-1, 0]]) # 需要注意的是 行列 和 坐标 是不一致的
matDst = np.float32([[50,50],[100, height-50],[width-200,100]])

matAffine = cv2.getAffineTransform(matSrc,matDst) #mat 1 src 2 dst 形成组合矩阵
dst = cv2.warpAffine(img, matAffine,(height, width))
cv2.imshow('image',dst)
cv2.waitKey(0)

需要确定图像矩阵的三个点坐标,及(左上角, 左下角,右上角).定义两个矩阵,matSrc 为原图的三个点坐标,matDst为进行仿射的三个点坐标,通过cv2.getAffineTransform()形成组合矩阵.效果如下:

Python3+OpenCV2实现图像的几何变换(平移、镜像、缩放、旋转、仿射)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现类的静态变量用法实例
May 08 Python
python TCP Socket的粘包和分包的处理详解
Feb 09 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
python实现海螺图片的方法示例
May 12 Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 Python
简单了解python中的f.b.u.r函数
Nov 02 Python
Python 写了个新型冠状病毒疫情传播模拟程序
Feb 14 Python
Python3 mmap内存映射文件示例解析
Mar 23 Python
pyecharts动态轨迹图的实现示例
Apr 17 Python
Python基于jieba, wordcloud库生成中文词云
May 13 Python
openCV提取图像中的矩形区域
Jul 21 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
Python 通过打码平台实现验证码的实现
May 13 #Python
利用python和百度地图API实现数据地图标注的方法
May 13 #Python
一篇文章彻底搞懂Python中可迭代(Iterable)、迭代器(Iterator)与生成器(Generator)的概念
May 13 #Python
为什么你还不懂得怎么使用Python协程
May 13 #Python
Python玩转加密的技巧【推荐】
May 13 #Python
11个Python3字典内置方法大全与示例汇总
May 13 #Python
python中的数据结构比较
May 13 #Python
You might like
第二节--PHP5 的对象模型
2006/11/16 PHP
解析php中die(),exit(),return的区别
2013/06/20 PHP
Yii框架引入coreseek分页功能示例
2019/02/08 PHP
javascript编程起步(第五课)
2007/01/10 Javascript
Javascript判断对象是否相等实现代码
2013/03/18 Javascript
JS实现金额转换(将输入的阿拉伯数字)转换成中文的实现代码
2013/09/30 Javascript
JavaScript的History API使搜索引擎抓取AJAX内容
2015/12/07 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
Django与Vue语法的冲突问题完美解决方法
2017/12/14 Javascript
Vue实现简易翻页效果源码分享
2018/11/08 Javascript
electron制作仿制qq聊天界面的示例代码
2018/11/26 Javascript
js module大战
2019/04/19 Javascript
微信小程序返回箭头跳转到指定页面实例解析
2019/10/08 Javascript
Nest.js 授权验证的方法示例
2021/02/22 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[02:01]大师之路——DOTA2完美大师赛11月论剑上海
2017/11/06 DOTA
Python的装饰器模式与面向切面编程详解
2015/06/21 Python
在Django框架中编写Context处理器的方法
2015/07/20 Python
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python win32com 操作Exce的l简单方法(必看)
2017/05/25 Python
Python重新加载模块的实现方法
2018/10/16 Python
python3 http提交json参数并获取返回值的方法
2018/12/19 Python
简单了解python单例模式的几种写法
2019/07/01 Python
Python 实现网课实时监控自动签到、打卡功能
2020/03/12 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Groupon荷兰官方网站:高达70%的折扣
2019/11/01 全球购物
教师求职信范文分享
2013/12/27 职场文书
药店主任岗位责任制
2014/02/10 职场文书
铲车司机岗位职责
2014/03/15 职场文书
合伙经营协议书范本
2014/04/18 职场文书
小学生感恩老师演讲稿
2014/08/28 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
高校自主招生校长推荐信
2015/03/23 职场文书
检讨书怎么写
2015/05/07 职场文书
导游词之上海东方明珠塔
2019/09/25 职场文书