我正在嘗試從該欄位創建單應矩陣:

(帶有ID的源影像:)

到目標影像:

源點的點是:
pts_src = [[ 761, 704],
[ 910, 292],
[1109, 544],
[ 619, 479],
[ 656, 373 ],
[1329, 446],
[ 20, 559],
[ 87, 664],
[ 238, 501],
[ 399, 450]]
以及目標點的點(新影像):
pts_dst = [[147, 330],
[ 35 , 20],
[147, 225],
[ 75, 203],
[ 35, 155],
[147, 155],
[ 35, 317],
[ 75, 351],
[ 35, 237],
[ 35, 203]]
我嘗試使用以下代碼創建單應矩陣:
import numpy as np
pts_src = np.array(pts_src)
pts_dst = np.array(pts_dst)
h, status = cv2.findHomography(pts_src, pts_dst)
print(h) #homography matrix
我得到了以下單應矩陣:
[[ 4.00647822e-01 1.41196305e 00 -6.90548584e 02]
[-1.28068526e-01 3.03783700e 00 -6.98945354e 02]
[ 3.12182175e-04 4.06980322e-03 1.00000000e 00]]
我試圖檢查單應矩陣是否正確,所以我使用了源影像中的第一個坐標(761, 704),并檢查我是否在目標影像中得到了正確的坐標,應該是(147, 330). 我嘗試使用方程式new_x, new_y, new_z = h*(x,y,z):
p = [761, 704, 1]
print(np.matmul(h, p))
我得到了:
array([ 608.36639573, 1342.23174648, 4.1027121 ])
這是非常遠的(并且由于某種原因z是4.1)。
而且我也嘗試了第二點(910, 292),我應該得到(35 , 20),但我得到了[86.33414416, 71.5606917 , 2.47246832]。
知道為什么我無法獲得正確的坐標嗎?
uj5u.com熱心網友回復:
感謝@fana,評論中提到了解決方案 - 將x和y坐標除以z (x/z, y/z)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/492803.html
標籤:Python opencv 图像处理 计算机视觉 单应性
上一篇:NGINX Phusion乘客server_tokens:關閉;和proxy_hide_headerX-Powered-By;似乎不起作用
