常服的英文译语怎么说-法国小姐
2023年3月31日发(作者:国际音标发音表)
相关侯门一入深似海从此萧郎是路人全诗 --Python图像的⼏何变换(包括缩放平移旋转仿射变换透视变
化)
⽂章⽬录
1.实现
以下内容来⾃:
OpenCV-PythonTutorials>ImageProcessinginOpenCV>
OpenCV提供两种转换函数,fine和rspective,有了这两个函数,就可以进⾏所有类型的变换。fine使⽤2x3
的变换矩阵,rspective使⽤3x3的变换矩阵作为输⼊。
1.1Scaling(缩放)
Shrink&Zoom缩放
缩放就是对图像进⾏resize,opencv中使⽤()完成这个功能。
图像⼤⼩可以⼿动指定,也可以指明缩放因⼦
可以使⽤不同的插值⽅法,推荐的插值⽅法是_AREA(图像缩⼩时),_CUBIC(slow)和_LINEAR(图像变
⼤时)。默认的插值⽅法是_LINEAR⽤于进⾏resize.
可以使⽤以下⽅法对输⼊图像进⾏resize
#准备⼯作
importcv2
importnumpyasnp
asplt
%matplotlibinline
ms[\'-serif\']=[\'SimHei\']#⽤来正常显⽰中⽂标签
ms[\'e_minus\']=False#⽤来正常显⽰负号
img=(\"../../../img/\")
#使⽤缩放因⼦
res=(img,None,fx=0.5,fy=0.5,interpolation=_CUBIC)
#直接指定(width,height)
res2=(img,(400,250),interpolation=_CUBIC)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1.2Translation(平移)
平移就是指移动⼀个物体的位置,如果已知移动的⽅向(左移/右移,上移/下移)以及移动的距离(),那么就可以创建⼀个类似下
⾯的转移矩阵
可以使⽤numpyarray来元旦的古诗10首小学 定义这个转移矩阵,dtype类型为:32。然后将这个矩阵传递给
fine()函数。例如,转移的距离为(100,50)(X轴⽅向移动距离,Y轴⽅向移动距离描写冬天美景的古诗 ):
(x,y)t,tx
y
M
#准备⼯作
importcv2
importnumpyasnp
asplt
%matplotlibinline
ms[\'-serif\']=[\'SimHei\']#⽤来正常显⽰中⽂标签
ms[\'e_minus\']=False#⽤来正常显⽰负号
img=(\"../../../img/\")
row,col=[0],脸组词 [1]
M=32([[1,0,青山依旧在几度夕阳红的作者是明代的 100],[0,1,50]])
dst=fine(img,M,(col,row))
#注意,这⾥是(col,row),⽽不是(row,col)
d诗经男孩名字高端大气 st_reverse=fine(img,M,(row,col))
#如果是(row,col)就会变成下⾯中间的样⼦
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
注意
fine()函数的第三个参数指的是输出图像的⼤⼩,其格式应该为:宽,⾼,记清楚,宽=列数,⾼=⾏数
1.3Rotation(旋转)
将⼀个图像旋转度,是通过以下形式的转换矩阵实现的。(但是很明显,之前说fine()函数接受的转移矩阵必须是,所以下⾯
这个普通的矩阵肯定是不能直接使⽤的)
不过OpenCV提供了可以在任意旋转中⼼五经是哪五经 进⾏旋转的功能,这样就可以在任意唯⼀进⾏旋转,⽽不是像上⾯那样,只可以以图像中⼼为旋转
中⼼进⾏旋转。修改后的转移矩阵可以表⽰为:
其中,
为了获取这个转移矩阵,OpenCV提供了ationMatrix2D函数,该函数的函数原型为:getRotationMatrix2D(center,angle,scale)。
下⾯例⼦中,将图像旋转90度,没有对旋转中⼼进⾏改变,图像也不进⾏缩放。
23
M
#读取图像的代码在1.1和1.2部分有
M=ationMatrix2D(((col-1)/2.0,(row-1)/2.0),90,1)
dst=fine(img,M,(col,row))
1
2
3
这个其实在OCR做预处理的时候很常见真正30个有名的民间故事 ,参考:
1.4AffineTransformation(仿射变换)
在仿射变换中,原始图中平⾏的线,在结果图中也仍然保持平⾏。为了找出这个转移矩阵,需要找到输⼊图像中的三个点,以及这三个点在
输出图像中的位置。ineTransform会创建⼀个的矩阵,将这个矩阵传⼊fine中。23
#读取图像的代码在1.1和1.2部分有
pts1=32([[50,50],[200,50],[50,200]])
pts2=32([[10,100],[200,50],[100,250]])
M=ineTransform(pts1,pts2)
dst=fine(img,M,(col,row))
1
2
3
4
5
6
所以仿射变换,其实就相当于把矩形拉着四个⾓,变成⼀个平⾏四边形。
关于ineTransform创建的的矩阵,其实就是根据输⼊的三组顶点,和这三个点在输出图像中的三组位置,使⽤矩阵乘法,得到
这个转移矩阵M。公式解释来⾃:
23
pts1=32([[50,50],[200,50],[50,200]])#原图的三个点
pts2=32([[10,100],[200,50],[100,250]])#原图三个点变换后在输出图的位置(这个要⾃⼰蒙吧。。⽐较容易找的点其实就是四个⾓的位置)
M=ineTransform(pts1,pts2)
M
>(array([[1.26666667,0.6,-83.33333333],
[-0.33333333,1.,66.66666667]]),
1
2
3
4
5
6
简单来说,pts1就是dst(shape=(3,2)),pts2就是src(shape=(3,2)),所以矩阵乘法可以表⽰为:
所以就是已知源和⽬标,由三组点,确认中间的这个变换矩阵(就好像,要求y=ax+b,其实只需要知道两组(x,y)就可以找到和的映射关
系⼀样)
1.5PerspectiveTransformation(透视变换)
对于透视变换,需要的变换矩阵。和仿射变换不同的是(仿射变换保持平⾏),透视变换前后直线仍然是直的(斜线只要不转
弯,就仍然是直线。只是⽅向不是正东/西/南/北⽽已)
同样的,为了找到这个变换矩阵,这次需要输⼊输出图像中对应4个点。这四个点中,需要有三个点不共线(都是为了计算)。
然后可以使⽤spectiveTransform函数找到那个变换矩阵。然后再使⽤这个计算出的3times3$的变换矩阵作
为rspective的参数进⾏调⽤。
1.6总结
综上,可以知道,
缩放使⽤函数
平移、旋转以及仿射变换使⽤的都是函数,只是获取变换矩阵M的⽅式不同,所以可以认为前两者属于仿射变换
的特殊情况
透视变换使⽤的是函数
0.理论
从仿射变换中我举的例⼦中可以知道,这些变换其实就是对源矩阵做⼀个矩阵乘法。
xy
33
#读取图像的代码在1.1和1.2部分有
pts1=32([[56,65],[368,52],[28,387],[389,390]])
pts2=32([[0,0],[300,0],[0,300],[300,300]])
M=spectiveTransform(pts1,pts2)
#注意,这⾥的函数调⽤时getPerspectiveTransform,⽽不再是getAffineTransform
dst=rspective(img,M,(col,row))
1
2
3
4
5
6
7
resize()
fine()
rspective()
感谢和,提供了很好的图.
粘贴如下:
2.新发现
看到了国外⼀门课程,斯坦福EE368/CS232-DigitalImageProcessing,主页点击
另外还有中国⼤学mooc上数字图像处理的课程
3.疑惑
以前我只想实现⼀个简单的平移功能,所以我构建了⼀个和原图⼀样⼤的零矩阵,然后将的部分数值赋给,然后就出现了下⾯这种
情况。⾄今也没想明⽩为什么
XZXZ
Z=_like(X)#=(229,227,3)
print(,)
Z[:,:,40:]=X[:,:,:187]
(figsize=(5,10))
t(211)
(e(229,227,3))
t(212)
(e(229,227,3))
1
2
3
4
5
6
7
8
9
参考:
官⽅⽂档:
opencv官⽅⽂档:以及
opencv官⽅⽂档参考了:ComputerVision:AlgorithmsandApplications这本书,书的链接点击
matplotlib⽂档:
mat关于中国节日的古诗 plotlib⽂档:
另外,以前看的opencv-python的那个⽂档,⽬前已经失效了。但是在opencv的官⽅⽂档⾥,有opencv-python的内容,参考:
博客:
PPT:
更多推荐
affine是什么意思ine在线翻译读音例句
发布评论