python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)
类别:脚本大全 浏览量:238
时间:2021-10-02 01:37:07 python opencv图像合并
Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射前言
总结一下最近看的关于opencv图像几何变换的一些笔记.
这是原图:
1.平移
|
import cv2 import numpy as np img = cv2.imread( "image0.jpg" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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个像素.如图:
2.镜像
|
import cv2 import numpy as np img = cv2.imread( 'image0.jpg" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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生成一个如下效果:
3.缩放
|
import cv2 img = cv2.imread( "image0.jpg" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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:需要旋转的角度.参数三:需要缩放的比例.效果如下图:
5.仿射
|
import cv2 import numpy as np img = cv2.imread( 'image0.jpg" alt="python opencv图像合并(Python3+OpenCV2实现图像的几何变换平移、镜像、缩放、旋转、仿射)" border="0" /> 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()形成组合矩阵.效果如下:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持开心学习网。
原文链接:https://blog.csdn.net/missyougoon/article/details/81092512
您可能感兴趣
- python对于gbk处理(Python 2/3下处理cjk编码的zip文件的方法)
- linux查python进程(linux查找当前python解释器的位置方法)
- python画佩奇(啥是佩奇?使用Python自动绘画小猪佩奇的代码实例)
- 学python从零基础到开发游戏(python开发游戏的前期准备)
- python中匿名函数关键字(浅谈python之高阶函数和匿名函数)
- python好看图案(python实现趣味图片字符化)
- python爬虫怎么爬取vip资源(Python网络爬虫之爬取微博热搜)
- python如何新建虚拟环境(详解如何管理多个Python版本和虚拟环境)
- python技巧图解(Python魔法方法功能与用法简介)
- python中列表操作五种常用方法(Python使用paramiko操作linux的方法讲解)
- python将txt数据写入excel(Python将列表数据写入文件txt, csv,excel)
- python html文字分段(Python对HTML转义字符进行反转义的实现方法)
- python爬虫书籍经典(Python利用lxml模块爬取豆瓣读书排行榜的方法与分析)
- python提供的四种基本数据类型(浅谈python的输入输出,注释,基本数据类型)
- python pandas 匹配值(python 使用pandas计算累积求和的方法)
- pythonhttp文件服务器(使用Python创建简单的HTTP服务器的方法步骤)
- 冰岛旅游攻略(冰岛旅游攻略及花费八日游)
- 寒假旅游攻略(成都寒假旅游攻略)
- 菲律宾旅游攻略(菲律宾旅游攻略地图)
- 清华大学难考吗(清华大学考研录取分数线)
- 观花盆栽佛肚竹盆景制作及养护(观花盆栽佛肚竹盆景制作及养护)
- 春天养佛肚竹,做好这几件事,叶绿根壮寓意好 越养越旺家(春天养佛肚竹做好这几件事)
热门推荐
- 阿里云怎么注册用户(怎么注册阿里云帐号)
- python datetime模块是什么(Python中时间datetime的处理与转换用法总结)
- 织梦dedecms教程(DedeTag Engine Create File False 提示的种种原因及解决方法小结)
- Windows系统 VPS/云服务器远程3389管理连接(Windows系统 VPS/云服务器远程3389管理连接)
- appui代码(AmazeUI 图标的示例代码)
- mysql update 多个字段(mysql update case 更新字段值不固定的操作)
- django学生管理系统搭建(Django实现学员管理系统)
- django连接web实现登录功能(解决django前后端分离csrf验证的问题)
- 云服务器性能怎么判断(云服务器的负载能力怎么样)
- jQuery商品属性选择的实现
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9