文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

OpenCV中常用图像几何变换有哪些

2023-06-22 02:19

关注

这篇文章主要为大家展示了“OpenCV中常用图像几何变换有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“OpenCV中常用图像几何变换有哪些”这篇文章吧。

0 程序环境与所学函数

本章程序运行需要导入下面三个库,并定义了一个显示图像的函数

所学函数

##放大、缩小cv.resize(img,dsize,[interpolation])##平移变换M = np.array([[...]], dtype=np.float32)cv.warpAffine(img, M, dsize)##镜像变换cv.flip(img, 1) # 垂直镜像cv.flip(img, 0) # 水平镜像cv.flit(img, -1) # 水平垂直同时进行##旋转变换M = cv.getRotationMatrix2D(center, angle, scale)img_rotate = cv.rotate(img, cv.ROTATE_90_CLOCKWISE)##透视变换M = cv.getPerspectiveTransform(src, dst)img = cv.warpPerspective(img, M, dsize)

1 裁剪、放大、缩小

读入图像

img =  cv.imread('pic/rabbit500x333.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

裁剪:数组选择方法(冒号)

#裁剪rabbit = img[150:450:] #限定行数,列数和三通道show(rabbit)

显示

OpenCV中常用图像几何变换有哪些

放大和缩小:resize()函数

插值方法

OpenCV中常用图像几何变换有哪些

程序实现

#放大缩小#cv.resize(img,dsize,[interpolation])  dsize表示大小,[interpolation]是插值方法,可选,有默认值img2 = cv.resize(img,(500,400))  #放大为宽500高400#使用定义插值方法#一般来说放大地话选择LINEAR方法,缩小选择AREA方法img3 = cv.resize(img,(500,400),interpolation=cv.INTER_NEAREST)show(np.hstack([img2,img3]))

显示

OpenCV中常用图像几何变换有哪些

2 平移变换

原理、平移矩阵推导

OpenCV中常用图像几何变换有哪些

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

程序实现

# M = np.array([[...]],dtype=np.float32) # cv.warAffine(img,M,dsize) cv里面图像仿射变换函数,M是上面矩阵,dsize是输出图像大小M=np.array([    [1,0,100],    [0,1,50]],dtype=np.float32)  #水平向右平移100个像素点,竖直向下平移50个像素点,原理见理论部分 img2 = cv.warpAffine(img,M,(333,500))show(img2)

显示

OpenCV中常用图像几何变换有哪些

3 错切变换

原理、错切矩阵推导

OpenCV中常用图像几何变换有哪些

OpenCV中常用图像几何变换有哪些

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

水平错切

M = np.array([    [1,0.2,0],    [0,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(533,500))show(img3)

显示

OpenCV中常用图像几何变换有哪些

垂直错切

M = np.array([    [1,0,0],    [0.3,1,0]],dtype=np.float32) img3 = cv.warpAffine(img,M,(333,700))show(img3)

显示

OpenCV中常用图像几何变换有哪些

4 镜像变换

原理、镜像矩阵推导

OpenCV中常用图像几何变换有哪些

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

水平镜像

Mx = np.array([    [-1,0,333],    [0,1,0]],dtype = np.float32)img2 = cv.warpAffine(img,Mx,(333,500))  #仿射变换函数show(img2)

显示

OpenCV中常用图像几何变换有哪些

垂直镜像

My = np.array([    [1,0,0],    [0,-1,500]],dtype=np.float32) img3 = cv.warpAffine(img,My,(333,500))show(img3)

显示

OpenCV中常用图像几何变换有哪些

opencv内置函数实现镜像变换

#垂直镜像 cv.flip(img,1)

#水平镜像 cv.flip(img,0)

#水平垂直同时进行 cv.flip(img,-1)

程序实现

img4 = cv.flip(img,1)  #垂直镜像img5 = cv.flip(img,0)  #水平镜像img6 = cv.flip(img,-1) #水平垂直镜像同时进行 show(np.hstack([img4,img5,img6]))

显示

OpenCV中常用图像几何变换有哪些

5 旋转变换

原理、旋转矩阵推导

OpenCV中常用图像几何变换有哪些

OpenCV中常用图像几何变换有哪些

读入图像

img = cv.imread('pic/rabbit500x333.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

图像旋转

beta = np.pi/4#旋转矩阵M  = np.array([    [np.cos(beta),np.sin(beta),0],    [-np.sin(beta),np.cos(beta),0]],dtype=np.float32) img2 = cv.warpAffine(img,M,(633,300))show(img2)

显示

OpenCV中常用图像几何变换有哪些

opencv内置获取旋转矩阵函数:

M = cv.getRotationMatrix2D(center,angle,scale)  

center是旋转中心,angle是旋转角度,scale表示放大还是缩小

用上面函数获取旋转矩阵并实现图像旋转

h,w,c = img.shape  #获取图像的高度和宽度,方便后面设置旋转中心 M2 = cv.getRotationMatrix2D((w//2,h//2),45,1)img3 = cv.warpAffine(img,M2,(533,500))  #仿射函数实现show(img3

显示

OpenCV中常用图像几何变换有哪些

opencv内置实现图像旋转函数

img_rotate =cv.rotate(img,cv.ROTATE_90_COUNTERCLOCKWISE)

只能进行90度倍数的旋转

程序实现

# 逆时针旋转90度img_rotate = cv.rotate(img,cv.ROTATE_90_COUNTERCLOCKWISE)show(img_rotate)

显示

OpenCV中常用图像几何变换有哪些

6 透视变换

M = cv.getPerspectiveTransform(str,dst)

str:原始图像矩阵端点位置,dst:目标图像矩阵位置

img2 = cv.warpPerspective(img,M,(w,h))

读入图像

img = cv.imread('pic/parthenon500x750.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

程序实现

#在原图中定位四个点,这里找的是柱子前面四个点的大概位置,眼睛观察法找的str = np.array([    [210,50],    [610,270],    [650,470],    [150,450]],dtype=np.float32) #目标图像中矩阵dst = np.array([    [150,50],    [650,50],    [650,470],    [150,470]],dtype=np.float32) h,w,c = img.shape #透视变换将一个类似矩形的图形拉成一个矩形M = cv.getPerspectiveTransform(str,dst)img2 = cv.warpPerspective(img,M,(w,h))show(img2)

显示

OpenCV中常用图像几何变换有哪些

应用:车道检测、图片矫正

7 最近邻插值、双线性插值

原理:

OpenCV中常用图像几何变换有哪些

最近邻插值图示:

OpenCV中常用图像几何变换有哪些

双线性插值图示

OpenCV中常用图像几何变换有哪些

读入图像

img = cv.imread('pic/rabbit50x33.jpg')show(img)

显示

OpenCV中常用图像几何变换有哪些

程序实现

img1 = cv.resize(img,(330,500),interpolation=cv.INTER_NEAREST) #最近邻插值img2 = cv.resize(img,(330,500),interpolation=cv.INTER_LINEAR_EXACT) #精确双线新插值 show(np.hstack([img1,img2]))

显示

OpenCV中常用图像几何变换有哪些

可以看出最近邻插值还是比较模糊的,过渡结果没有双线性插值平滑

以上是“OpenCV中常用图像几何变换有哪些”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     807人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     351人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     314人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     433人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     221人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯