1
我想在cv2.warpAffine的圖像上使用某些單獨(x,y)點上的相同仿射矩陣M.看來cv2.transform是要走的路。當我嘗試發送點的NX2矩陣我得到negged(使cv.transform工作的麻煩
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
我能得到我想要只使用numpy的算術變換:
dst = np.dot(src,M[:,0:2]) +M[:,2]
print('dest:{}'.format(dst))
但想明白怎麼回事的文檔。說cv2.transform希望M的頻道數等於M的列數,但我不清楚頻道會是什麼 - 也許是'x'頻道和'y'頻道,但第三個頻道會是,而且不同的行代表什麼意思?
很多時候,當OpenCV期望點他們喜歡他們的形式'np.array([[[x1,y1]],[[x2,y2]],...])''。他們通常希望進行點轉換---單個列或行向量,其長度等於座標數量的點數和通道數。第三個座標可以是第三維座標 - 變換矩陣畢竟不僅僅適用於2D變換。 –
謝謝你做的伎倆,我有維度順序思想倒退,c * h * w而不是h * w * c,太多caffe –
偉大的,我已經添加它作爲一個答案。請選擇它作爲你的問題的答案,如果你已經全部解決了。 –