Heyho!
我有一张平面图像(从上方拍摄,角度为30°),我想要x& y特定像素的坐标,但以cm为单位(坐标系在表面中)
有没有办法存档?
我正在使用python,但任何帮助表示赞赏! :)
编辑: 我尝试了下面的单片方法但是我没有安静地设法让它工作。她就是我做的:
#two sets of points I used
#src: corners + center of my 400px*460px image
#dst: coordinate system being outside the image
src = np.matrix(((1, 1, 1),(400, 1, 1),(1, 460, 1),(400, 460, 1),(200,230,1)))
dst= np.matrix(((31.6, 7, 1),(14.5, 7, 1),(28.4, 26.3, 1),(17, 26.3, 1),(22.6,18.6,1 )))
#src: random points from the image of my 400px*460px image
#dst: coordinate system being in the actual image
src = np.matrix(((1, 1, 1),(400, 460, 1),(200,1,1), (100, 170, 1), (280, 320, 1),(300, 50, 1)))
dst= np.matrix(((0, 0, 1),(14.6, 19.3, 1),(17.1/2,0,1), (5.0, 9.2, 1), (11.65, 15.3, 1), (12.9, 2.9, 1) ))
H = cv2.findHomography(src,dst,0)[0]
print (H)
for c in range(0,5):
x= c*100
y = 1
print(x,y,np.dot(H,np.array((x,y,1))))
Actual Photo of the setup
正方形是(400px * 460px)图片上可见的区域。相机位于右侧的黑匣子中。 X& Y是我的Pixelcoordinates
只要您保持在x轴上,两组数字的结果都很好。一旦我沿着y轴向下移动,数字就会出错。
答案 0 :(得分:1)
一种方法是估计平面的平面与图像平面之间的单应性。估算单应性的简单方法:
cv::findHomography
; 对于使用OpenCV的C ++中的解决方案示例,请参阅我的答案https://stackoverflow.com/a/36388035/15485
如果你需要更高的精度,你还需要补偿镜头的失真,因为你说你有一个覆盆子pi相机可能失真是不可忽视的...但它取决于你需要的准确性。单应性不能补偿失真。