Python 在OpenCV里实现仿射变换—坐标变换效果

时间:2021-05-22

在现实的图像操作软件中,经常碰到的不是给出放大多少倍,而是由用户在软件的界面上选择多大的区域,或者选择几个点,那么这样情况下,怎么样来计算出变换矩阵呢?从前面知道变换矩阵是2X3的矩阵,说明有六个未知数,又有中学的代数知识知道要解决六个未知数,那么方程组至少要联立三条方程,要准备三条方程的先决条件,就是要有三组坐标。因此,只要在用户选择的区域里找到三个不同点的坐标,就可以计算出变换矩阵。如果给出三组坐标[0, 0], [200, 0], [0, 200],通过变换之后新坐标是[0, 0], [128, 0], [0, 50],那用什么函数来计算这个矩阵呢?这是要使用OpenCV里的getAffineTransform函数。

下面通过例子来演示这个功能:

#python 3.7.4,opencv4.1#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579#import cv2import numpy as np#图片的路径imgname = "img1.jpg"#读取图片image = cv2.imread(imgname, cv2.IMREAD_COLOR)#图片的高度和宽度h,w = image.shape[:2]#从目标坐标计算出2X3的矩阵,然后调用warpAffine执行src = np.array([[0, 0], [200, 0], [0, 200]], np.float32)dst = np.array([[0, 0], [128, 0], [0, 50]], np.float32)A1 = cv2.getAffineTransform(src, dst)d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)#显示操作之后的图片cv2.imshow("d1",d1)#显示图像cv2.imshow("image", image)#等待用户输入,然后删除所有窗口cv2.waitKey(0)cv2.destroyAllWindows()

输出结果如下:

使用坐标变换的方法,可以不用知道中间是否先旋转,还是先平移的操作。

总结

以上所述是小编给大家介绍的Python 在OpenCV里实现仿射变换—坐标变换效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章