【问题标题】:convert the image value array into x/y coordinates将图像值数组转换为 x/y 坐标
【发布时间】:2021-09-08 03:34:27
【问题描述】:

我想通过openCV使用canny边缘检测后找到边缘的x/y坐标

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
img = cv.imread('star.png',0)
edges = cv.Canny(img,100,200)
plt.subplot(121),plt.imshow(img,cmap = 'gray')
plt.title('Original Image'), plt.xticks([]), plt.yticks([])
plt.subplot(122),plt.imshow(edges,cmap = 'gray')
plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
plt.show()

之前

转灰度后和canny的边缘检测

数据值存储在变量“edges”中,有没有办法获取实际边缘的值并将其转换为 x,y 坐标

谢谢

【问题讨论】:

    标签: python-3.x opencv


    【解决方案1】:

    您可以使用 numpy 库获取边缘坐标:

    xAxis, yAxis = np.nonzero(edges)
    

    这里xAxisyAxis分别包含了所有的x轴和y轴分别属于canny检测到的边缘。您也可以简单地计算这些坐标的平均值,即检测到的边缘坐标的中心:

    centerX = int(np.mean(xAxis))
    centerY = int(np.mean(yAxis))
    

    这是整个代码:

    import numpy as np
    import cv2 as cv
    from matplotlib import pyplot as plt
    from numpy.core.defchararray import center
    img = cv.imread('/home/yns/Downloads/st.jpg',0)
    edges = cv.Canny(img,100,200)
    
    xAxis, yAxis = np.nonzero(edges)
    
    centerX = int(np.mean(xAxis))
    centerY = int(np.mean(yAxis))
    
    
    cv.circle(img,(centerX,centerY),5,(0,255,255),3)
    
    
    plt.subplot(121),plt.imshow(img,cmap = 'gray')
    plt.title('Original Image'), plt.xticks([]), plt.yticks([])
    plt.subplot(122),plt.imshow(edges,cmap = 'gray')
    plt.title('Edge Image'), plt.xticks([]), plt.yticks([])
    plt.show()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 2015-12-31
      相关资源
      最近更新 更多