jer*_*man 5 python opencv numpy affinetransform
我想在某些单独的(x,y)点上使用与在cv2.warpAffine图像上使用的相同的仿射矩阵M。看来cv2.transform是要走的路。当我尝试发送Nx2的点矩阵时,我感到很沮丧(
src = np.array([
[x1,y1],[x2,y2],[x3,y3],[x4,y4]], dtype = "float32")
print('source shape '+str(src.shape))
dst=cv2.transform(src,M)
cv2.error: /home/jeremy/sw/opencv-3.1.0/modules/core/src/matmul.cpp:1947: error: (-215) scn == m.cols || scn + 1 == m.cols in function transform
Run Code Online (Sandbox Code Playgroud)
我可以使用numpy算术获得所需的转换:
dst = np.dot(src,M[:,0:2]) +M[:,2]
print('dest:{}'.format(dst))
Run Code Online (Sandbox Code Playgroud)
但是想了解发生了什么。文档说cv2.transform想要的通道数等于M中的列数,但我不清楚通道是什么-也许是'x'通道和'y'通道,但是第三个通道是,不同的行表示什么?
Python上的OpenCV通常需要表单中的点
np.array([ [[x1, y1]], ..., [[xn, yn]] ])
Run Code Online (Sandbox Code Playgroud)
这在文档中cv2.transform()并不清楚,但在文档中对于使用点的其他函数更清晰,例如cv2.perspectiveTransform()它们提到的坐标位于单独的通道上:
src –输入两通道或三通道浮点数组
变换也可以在3D中使用(使用4x4透视变换矩阵),从而可以解释在中使用两通道或三通道阵列的能力cv2.transform()。
| 归档时间: |
|
| 查看次数: |
1901 次 |
| 最近记录: |