1.cv2.findContours(mask, mode=CV_RETR_LIST, method=cv2.CHAIN_APPROX_SIMPLE)
opencv 2.x, 返回,contours, hierachy; opencv 3.x 返回 image, contours, hierachy,
contours是个list,每个是一个shape为(nx2)的轮廓,n为轮廓点个数2为x,y值,
2.warpAffine 使用三个点,如参数点数多与3个,那么使用前三个点;
matrix = cv2.getAffineTransform(points1,points2) #points1.shape:3x2
output = cv2.warpAffine(img,matrix,(cols,rows))
warpPerspective使用4个点
matrix = cv2.getPerspectiveTransform(points1,points2) # poits1.shape=4x2, 将四个点组成的平面转换成另四个点组成的一个平面
output = cv2.warpPerspective(img, matrix, (cols, rows))
不管是,warp,还是perspective变换,本质都是采样,是找目标图i,j位置对应的原图位置,没有对像素值进行运算。目标图i,j位置,在原图的哪个位置:Matrix * [i, j, 1]=[u,v,w],那么目标图中i,j位置的像素,就从u/w, v/w的原图位置,直接取像素,不进行任何像素值得变换。
3.warpPerspective变换后,如何变回去?
对于目标图x,y如何变换回去,得到对应原图中的位置:
M= 问题2中的Matrix
w = M30*x + M31*y + M32
u=x*w
v = y*w
所以: 原图i,j位置, [i,j,1] = inverse(Matrix) * [u, v, w]