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 OpenCV中获得轮廓的x,y位置_Python_Opencv - Fatal编程技术网

如何在Python OpenCV中获得轮廓的x,y位置

如何在Python OpenCV中获得轮廓的x,y位置,python,opencv,Python,Opencv,我试图从下图中获得轮廓的x和y位置,但我搞砸了。 我只需要找到轮廓的x和y位置或轮廓的中心 当我从GIMP手动查找它们的位置时,结果如下所示 290210 982, 190 570478 我相信用cv2.findContours方法可以做到,但我现在真的没有主意了 -离题- 我将使用win32api.SetCursorPos((xposition,yposition))在设置光标位置时使用这些值 谢谢事实上,您可以使用findContours来实现这一点。因为您有自己的轮廓,所以有几个选项:

我试图从下图中获得轮廓的x和y位置,但我搞砸了。

我只需要找到轮廓的x和y位置或轮廓的中心

当我从GIMP手动查找它们的位置时,结果如下所示

290210 982, 190 570478

我相信用cv2.findContours方法可以做到,但我现在真的没有主意了

-离题-

我将使用win32api.SetCursorPos((xposition,yposition))在设置光标位置时使用这些值


谢谢

事实上,您可以使用
findContours
来实现这一点。因为您有自己的轮廓,所以有几个选项:

  • 计算封闭矩形并取例如中心点
  • 计算力矩并取质心
  • 拟合最小封闭圆并取中心
  • 等等

  • 下面是一些您可以使用轮廓进行操作的示例,包括上面的选项

    事实上,您可以使用
    findContours
    实现这一点。因为您有自己的轮廓,所以有几个选项:

  • 计算封闭矩形并取例如中心点
  • 计算力矩并取质心
  • 拟合最小封闭圆并取中心
  • 等等

  • 下面是一些您可以使用轮廓进行操作的示例,包括上面的选项

    首先你需要找到轮廓,画一个边界框,然后从那里取x和y。我希望这有帮助

    import numpy as np
    import cv2
    
    im = cv2.imread('ctBI9.png')
    imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(imgray, 127, 255, 0)
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    for c in contours:
            if cv2.contourArea(c) <= 50 :
                continue    
            x,y,w,h = cv2.boundingRect(c)
            cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255,0), 2)
            center = (x,y)
            print (center)
    
    while True: 
        cv2.imshow('test',im)
        if cv2.waitKey(20) & 0xFF == 27:
            break
    cv2.destroyAllWindows()
    
    将numpy导入为np
    进口cv2
    im=cv2.imread('ctBI9.png')
    imgray=cv2.CVT颜色(im,cv2.COLOR\U BGR2GRAY)
    ret,thresh=cv2。阈值(imgray,127255,0)
    im2,轮廓,层次=cv2.findContours(阈值,cv2.RETR\u树,cv2.CHAIN\u近似值\u简单)
    对于等高线中的c:
    
    如果cv2.contourArea(c)首先需要找到轮廓,绘制一个边界框,然后从那里获取x和y。我希望这有帮助

    import numpy as np
    import cv2
    
    im = cv2.imread('ctBI9.png')
    imgray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
    ret, thresh = cv2.threshold(imgray, 127, 255, 0)
    im2, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    for c in contours:
            if cv2.contourArea(c) <= 50 :
                continue    
            x,y,w,h = cv2.boundingRect(c)
            cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255,0), 2)
            center = (x,y)
            print (center)
    
    while True: 
        cv2.imshow('test',im)
        if cv2.waitKey(20) & 0xFF == 27:
            break
    cv2.destroyAllWindows()
    
    将numpy导入为np
    进口cv2
    im=cv2.imread('ctBI9.png')
    imgray=cv2.CVT颜色(im,cv2.COLOR\U BGR2GRAY)
    ret,thresh=cv2。阈值(imgray,127255,0)
    im2,轮廓,层次=cv2.findContours(阈值,cv2.RETR\u树,cv2.CHAIN\u近似值\u简单)
    对于等高线中的c:
    如果cv2.contourArea(c)您可以在此处参考

    您可以在这里查阅


    最好在文章中包含该链接的相关部分。如果外部链接在将来被修改或删除,您的答案仍然有用。感谢您的推荐,我已经更新了答案@EldersGraciadoit最好在你的帖子中包含该链接的相关部分。如果外部链接在将来被修改或删除,您的答案仍然有用。感谢您的推荐,我已经更新了答案@埃尔德斯格拉西亚多