网站平台推广,ai制作海报,有没有专门做纸箱的网站,贵阳美容网站建设【1】引言
前序已经学习了如何平移和旋转缩放图像#xff0c;相关文章链接为#xff1a;
python学opencv|读取图像#xff08;二十七#xff09;使用cv2.warpAffine#xff08;#xff09;函数平移图像-CSDN博客
python学opencv|读取图像#xff08;二十八#xff0…【1】引言
前序已经学习了如何平移和旋转缩放图像相关文章链接为
python学opencv|读取图像二十七使用cv2.warpAffine函数平移图像-CSDN博客
python学opencv|读取图像二十八使用cv2.getRotationMatrix2D()函数旋转缩放图像-CSDN博客
在此基础上我们尝试倾斜拉伸图
【2】核心代码
前序学习进程中已经知晓平移图像的核心代码是设置M矩阵使其按照两行三列的形式通过改变第三列的值来移动图像 此时的M矩阵有两个可选变量x和y M[[1,0,x], [0,1,y]] 当x0图像向右移动x大小的位置当y0图像向右下移动y大小的位置当x和y取负值时图像分别向左和向上运动。 当我们想旋转图像时需要调用一个cv2.getRotationMatrix2D()函数来实现旋转通过定义旋转中心旋转角度和缩放倍数实现旋转和缩放目标。 Mat cv::getRotationMatrix2D ( Point2f center, #旋转中心需要提前定义好 double angle, #旋转角度 double scale ) #缩放倍数 而当我们想倾斜拉伸图像时是根据图像的坐标点来操作的 输入图像有四个顶角 取三个顶角的点坐标即可知晓图像大小 给出新的三个坐标点替换之前取到的三个坐标点即可倾斜拉伸图像。 具体调用的函数为cv2.getAffineTransform(p1,p2)。
点击下述链接直达函数官网教程
OpenCV: Geometric Image Transformations
在这里会看到对函数的详细介绍非常简单函数里练得输入是两个集合每个集合由三个坐标点组成。
【3】代码测试
首先是引入模块和完成初始图像的读取
import cv2 as cv # 引入CV模块
import numpy as np #引入numpy模块# 读取图片
src cv.imread(srcm.png)
然后先读取原图想的三个点
#设置点
rowslen(src) #读取图像行数
colslen(src[0]) #读取图像列数
p1np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p1[0][0,0] #第一点
p1[1][cols-1,0] #第二点
p1[2][0,rows-1] #第三点
再设置新的三个点
p2np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p2[0][100,0] #新的第一点
p2[1][cols-1,0] #新的第二点
p2[2][0,rows-1] #新的第三点
之后通过调用cv2.getAffineTransform(p1,p2)函数用p2的三个点坐标替换p1的三个点坐标由此实现图像的倾斜拉伸
cv.getAffineTransform(p1,p2) 最后回到cv2.warpAffine()函数实现图像的输出、显示和保存
dstcv.warpAffine(src,M,(cols,rows)) #输出图像
cv.imshow(srcm-qxls, dst) # 在屏幕展示绘制圆形的效果
cv.imwrite(srcm-qxls.png, dst) # 保存图像
cv.waitKey() # 图像不会自动关闭
cv.destroyAllWindows() # 释放所有窗口
使用的初始图像为srcm.png 图1 srcm.png
代码运行后的输出图像为 图2 srcm-qxls.png
【4】细节说明
这里给出的两组点其实p1[1]p2[1]p1[2]p2[2]发生变化的是p1[0]到p2[0]也就是把左上角的顶点往右移动100个像素位置此时图像会自动保持侧面的边线平行让右下角的点左移100个像素点。这就是图2所示的模样。 p1np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p1[0][0,0] #第一点
p1[1][cols-1,0] #第二点
p1[2][0,rows-1] #第三点p2np.zeros((3,2),np.float32) #32位浮点型全0矩阵
p2[0][100,0] #新的第一点
p2[1][cols-1,0] #新的第二点
p2[2][0,rows-1] #新的第三点 【5】总结
掌握了pythonopencv实现图像倾斜拉伸的技巧。