【图像处理】——Python实现几何变换(自定义+opencv库)

    科技2022-08-31  131

    理论知识:参考https://blog.csdn.net/on2way/article/details/40460675

    Python调用opencv函数参考:https://blog.csdn.net/on2way/article/details/46801063

    一、引自《数字图像处理》的基础知识汇总

            这个很重要!!!这里需要注意的是反向映射和前向映射的区别,反向映射是扫描输出图像,因为输出图像的大小需要我们事先进行设置,通常设置成大小和原图像一样且像素值全为0或1的图像,根据old = T^-1*new来反向计算新图像在旧图像中对应的坐标,将旧图像对应坐标的像素值赋值给新图像中被扫描的点即可。(这里old和new为列向量【i,j,1】,T为3x3矩阵)

    二、用Python自己编程实现几何变换

    1、移动变换

    import numpy as np import cv2 def translate(img,tx,ty): T = np.array([[1,0,tx], [0,1,ty], [0,0,1]]) h,w = img.shape transImg = np.ones((h,w)) for i in range(h): for j in range(w): psNew = np.array([[i], [j], [1]]) #psNew = T*psOld所以psOld = T^-1*psNew psOld = np.dot(np.linalg.inv(T),psNew) if psOld[0][0] < h and psOld[0][0]>0 and psOld[1][0] > 0 and psOld[1][0] < w: transImg[i,j] = img[int(psOld[0][0]),int(psOld[1][0])] else: transImg[i,j] = 0 return transImg img = cv2.imread("pic2.png",0) tranImg = translate(img,20,0) cv2.imshow("",tranImg) cv2.waitKey(0)

    其他的参见:https://blog.csdn.net/on2way/article/details/40460675

    Processed: 0.008, SQL: 9