Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否有Python函数从图像中获取坐标?_Python_Opencv_Image Processing_Vectorization - Fatal编程技术网

是否有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)