计算x& y以像素坐标为单位的坐标(cm)

时间:2016-05-26 13:36:53

标签: python opencv computer-vision

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轴向下移动,数字就会出错。

1 个答案:

答案 0 :(得分:1)

一种方法是估计平面的平面与图像平面之间的单应性。估算单应性的简单方法:

  1. 获取平面上四个(非共线)点的厘米坐标;
  2. 在图像中找到相同的四个点并以像素为单位获取它们的坐标;
  3. 使用cv::findHomography;
  4. 估算单应性
  5. 在图像中找到您感兴趣的点,并以像素为单位获取其坐标;
  6. 使用单应性以cm为单位计算点的坐标。
  7. 对于使用OpenCV的C ++中的解决方案示例,请参阅我的答案https://stackoverflow.com/a/36388035/15485

    如果你需要更高的精度,你还需要补偿镜头的失真,因为你说你有一个覆盆子pi相机可能失真是不可忽视的...但它取决于你需要的准确性。单应性不能补偿失真。