是否有Python函数从图像中获取坐标?
我想知道是否有一种方法可以拍摄像下面五角大楼那样的图像,并将其转换为一组点是否有Python函数从图像中获取坐标?,python,opencv,image-processing,vectorization,Python,Opencv,Image Processing,Vectorization,我想知道是否有一种方法可以拍摄像下面五角大楼那样的图像,并将其转换为一组点(x,y,x1,y1,x2,y2…)比如: (1,3, 2,6, 6,6, 7,3, 4,1) 坐标系根在左上角。我知道可以使用opencv将图像转换为数组,但这会将每个像素转换为数组的一个元素。我希望得到的只是非白色元素和它们的临界点(即它们改变方向的地方) 五角大楼: 在Python/OpenCV中,可以通过获取最大的外部轮廓和减少顶点来实现这一点 输入: 结果: 坐标: Polygon Points (x,y
(x,y,x1,y1,x2,y2…)
比如:
(1,3,
2,6,
6,6,
7,3,
4,1)
坐标系根在左上角。我知道可以使用opencv将图像转换为数组,但这会将每个像素转换为数组的一个元素。我希望得到的只是非白色元素和它们的临界点(即它们改变方向的地方)
五角大楼:
在Python/OpenCV中,可以通过获取最大的外部轮廓和减少顶点来实现这一点 输入:
结果: 坐标:
Polygon Points (x,y):
255,12
0,197
97,499
414,499
511,197
256,12
您可以使用
cv2.goodFeaturesToTrack()
方法检测图像的角点:
import cv2
img = cv2.imread("image.png", 0)
for (x, y) in cv2.goodFeaturesToTrack(img, 5, 0.01, 20)[:, 0].astype("int0"):
cv2.circle(img, (x, y), 27, 127, -1)
cv2.imshow("Image", img)
cv2.waitKey(0)
输出:
cv2.goodFeaturesToTrack()方法的位置参数为:
image
8位或浮点32位单通道图像
maxCorners
要返回的最大角数。如果发现的角多于找到的角,则返回其中最强的角<代码>maxCorners也许有什么,但我不知道。但是,您可以使用带有Scikit学习的Hough变换来检测直线:。然后你必须计算直线的起点和终点,或者更可能的是,找出它们的相交点,以获得角点的(像素)坐标。至少,我假设您需要像五角大楼这样的图形的角点坐标。您可以使用cv2.goodFeaturesToTrack()进行角点检测。另请参见,获取轮廓,然后使用cv2.approxPolyDP()减少轮廓点。再见。这些答案解决了你的问题吗?因此,请考虑接受/接受一个答案。如果没有,请随时指出原因。
import cv2
img = cv2.imread("image.png", 0)
for (x, y) in cv2.goodFeaturesToTrack(img, 5, 0.01, 20)[:, 0].astype("int0"):
cv2.circle(img, (x, y), 27, 127, -1)
cv2.imshow("Image", img)
cv2.waitKey(0)