Affine Transformation
https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html
Affine Transformation
In affine transformation, all parallel lines in the original image will still be parallel in the output image. To find the transformation matrix, we need three points from input image and their corresponding locations in output image. Then cv2.getAffineTransform will create a 2x3 matrix which is to be passed to cv2.warpAffine.
Check below example, and also look at the points I selected (which are marked in Green color):
img = cv2.imread('drawing.png')
rows,cols,ch = img.shape
pts1 = np.float32([[50,50],[200,50],[50,200]])
pts2 = np.float32([[10,100],[200,50],[100,250]])
M = cv2.getAffineTransform(pts1,pts2)
dst = cv2.warpAffine(img,M,(cols,rows))
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
import glob
import cv2
import numpy as np
import random,sys
image_dir='./'
for pics in glob.glob(image_dir + '7700.jpg'):
picName = pics.split('/')[1]
img = cv2.imread(pics)
rows,cols,ch = img.shape
pts1 = np.float32([[20,10],[40,10],[20,30]])
pts2 = np.float32([[18,10],[40,10],[20,30]])
pts3 = np.float32([[17,10],[40,10],[20,30]])
pts4 = np.float32([[16,10],[40,10],[20,30]])
pts5 = np.float32([[15,10],[40,10],[20,30]])
pts6 = np.float32([[14,10],[40,10],[20,30]])
'''
pts2 = np.float32([[23,10],[40,10],[20,30]])
pts3 = np.float32([[24,10],[40,10],[20,30]])
pts4 = np.float32([[25,10],[40,10],[20,30]])
pts5 = np.float32([[26,10],[40,10],[20,30]])
pts6 = np.float32([[27,10],[40,10],[20,30]])
'''
M2 = cv2.getAffineTransform(pts1,pts2)
M3 = cv2.getAffineTransform(pts1,pts3)
M4 = cv2.getAffineTransform(pts1,pts4)
M5 = cv2.getAffineTransform(pts1,pts5)
M6 = cv2.getAffineTransform(pts1,pts6)
dst2 = cv2.warpAffine(img,M2,(cols,rows))
dst3 = cv2.warpAffine(img,M3,(cols,rows))
dst4 = cv2.warpAffine(img,M4,(cols,rows))
dst5 = cv2.warpAffine(img,M5,(cols,rows))
dst6 = cv2.warpAffine(img,M6,(cols,rows))
cv2.imwrite(image_dir + "2warp" + picName, dst2)
cv2.imwrite(image_dir + "3warp" + picName, dst3)
cv2.imwrite(image_dir + "4warp" + picName, dst4)
cv2.imwrite(image_dir + "5warp" + picName, dst5)
cv2.imwrite(image_dir + "6warp" + picName, dst6)
浙公网安备 33010602011771号