在图示位置读取九个点的X,Y坐标
测试可以随机拍一张,实用的话需要固定手机的拍照位置,得到的图片如下:
实用如下代码显示这个图片,用鼠标悬停取抄写坐标
- import cv2
- import numpy as np
-
- input_img='/home/cheni/Downloads/xyz.jpeg'
- image = cv2.imread(input_img)
- #让图片可以缩写拉伸
- cv2.namedWindow('Harris', cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO)
- cv2.imshow('Harris',image)
-
- if cv2.waitKey(0) & 0xff == 27:
- cv2.destroyAllWindows()
效果如下:
鼠标悬停在P1上,在左下角就可以读取这个像素坐标值了。
验证算法如下:
- import numpy as np
- import cv2
- robot_end_xy=np.array([
- [-316,-611.4],
- [-359.7,-589.3],
- [-296.4,-573.2],
- [-372.3,-558.7],
- [-293.8,-530],
- [-343.4,-522.7],
- [-222.8,-510],
- [-329.6,-486.6],
- [-288.1,-472.4],
- ])
- phone_image_xy=np.array([
- [1371,923],
- [1912,965],
- [1367,1479],
- [1764,1423],
- [1555,1890],
- [2115,1702],
- [930,2490],
- [2150,2175],
- [1799,2520],
- ])
- #计算两组坐标之间的仿射矩阵
- m, _ = cv2.estimateAffine2D(phone_image_xy, robot_end_xy)
- print (m)
- def get_points_robot(x_camera, y_camera):
- robot_x = (m[0][0] * x_camera) + (m[0][1] * y_camera) + m[0][2]
- robot_y = (m[1][0] * x_camera) + (m[1][1] * y_camera) + m[1][2]
- return robot_x, robot_y
- #验证其中一个点,倒数第三个(930,2490)像素坐标转换机器人坐标
- x,y= get_points_robot(930,2490)
- print(x,y)
运行后结果分析:
- cheni@yuchen:~$ /bin/python3 /home/cheni/Desktop/suanfa.py
- [[-7.71668805e-02 3.77840943e-02 -2.45046408e+02]
- [ 3.92542458e-02 7.59681698e-02 -7.35221624e+02]]
- -222.7292116274272 -509.55443216333356
- cheni@yuchen:~$ ^C
1是计算的仿射矩阵,2是验证倒数第三个点,可以看到误差不是太大。
Python-opencv 手眼标定(九点定位)_opencv设置视觉抓取点怎么确定-CSDN博客
基于OpenCv的机器人手眼标定(九点标定法)《转载》_qt opencv 九点标定_hehedadaq的博客-CSDN博客