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如何实现日期自动增加(Python脚本按照当前日期创建多级目录)
- python元组汇总(Python数据类型之Tuple元组实例详解)
- python 读文件报错处理(解决python写入带有中文的字符到文件错误的问题)
- python实现七个基本算法(python实现维吉尼亚算法)
- python程序开发过程(python调用外部程序的实操步骤)
- docker镜像内安装python包(如何使用Docker搭建pypi私有仓库)
- python爬取在线评论(Python爬虫实现爬取百度百科词条功能实例)
- python用pyqt5制作登录界面(python3+pyqt5+itchat微信定时发送消息的方法)
- python完整异常机制(深入理解Python异常处理的哲学)
- python中mat文件怎么读(Python第三方库h5py_读取mat文件并显示值的方法)
- python turtle简易绘图(详解Python使用Plotly绘图工具,绘制甘特图)
- pythonsocket教程(python3利用Socket实现通信的方法示例)
- python能操作微信定时发消息(python给微信好友定时推送消息的示例)
- python 模块详解(举例讲解Python常用模块)
- python给一个数字md5加密(Python写一个基于MD5的文件监听程序)
- python学生管理系统的思路(python实现学员管理系统)
- 一天一冲也算表 麦步,一款待机 21 天的智能手表体验评测(一天一冲也算表)
- 魅族智能手表充电座曝光 Type-C 接口,线座分离设计(魅族智能手表充电座曝光)
- 华为 Watch GT2 Pro 智能手表曝光,新增支持无线充电(华为WatchGT2)
- vivo首款智能手表来了 也有血氧饱和度监测,一次充电18天续航(vivo首款智能手表来了)
- 你知道 七夕 的真正含义吗(你知道七夕的真正含义吗)
- 七夕的寓意(七夕的寓意)
热门推荐
- centos6.8安装docker(Linux Centos下使用脚本安装Docker的方法)
- mysqlexplain各个字段作用(MySQL EXPLAIN语句的使用示例)
- pythonide使用教程(对Python Pexpect 模块的使用说明详解)
- C#文件读写的方法
- dedecms使用手册(dedecms 软件下载模块中添加下载方式为迅雷下载联盟代码)
- ftp服务器登录错误(登陆FTP服务器提示530 Login authentication failed 错误的解决方法)
- sqlserver表导入数据(在SQLserver数据库之间进行传表和传数据的图文教程)
- docker容器映射到宿主机器(在宿主机上执行docker容器内部的shell或程序方式)
- nodejsweb服务(Nodejs实现内网穿透服务)
- ecs 云主机(如何解决ECS云主机无法访问其他内网主机和内网应用)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9