Python Can';找不到图像的右角

Python Can';找不到图像的右角,python,visual-studio,image-processing,Python,Visual Studio,Image Processing,我需要找到盒子前面的四个角 我试着输入不同的变量(角数、质量等级等),但它只找到了一个正确的角 以下是我目前的代码: 这是输出: 拐角检测器不工作。他们从不工作 在N、NE、SE和S方向寻找最远的非黑点。使用其他图像处理技术更容易找到角点。由于您的图像充满了细节,我们可以使用阈值、腐蚀和膨胀。请看下面: color = cv2.imread('box.png') plt.imshow(color); plt.xticks([]); plt.yticks([]); 您可以使用

我需要找到盒子前面的四个角

  • 我试着输入不同的变量(角数、质量等级等),但它只找到了一个正确的角

  • 以下是我目前的代码:

  • 这是输出:


    拐角检测器不工作。他们从不工作


    在N、NE、SE和S方向寻找最远的非黑点。

    使用其他图像处理技术更容易找到角点。由于您的图像充满了细节,我们可以使用阈值、腐蚀和膨胀。请看下面:

    color = cv2.imread('box.png')
    plt.imshow(color);
    plt.xticks([]);
    plt.yticks([]);
    


    您可以使用所有值来获得不同的结果。如果更改透视图,可能需要稍微更改代码。

    查找harris角点检测器方法,请参见此处。请不要使用代码的图像,始终将其作为具有正确格式的文本插入。
    gray = cv2.imread('box.png',0)
    gray[gray > 10 ] = 255
    plt.imshow(gray,cmap='gray');
    plt.xticks([]);
    plt.yticks([]);
    
    kernel = np.ones((5,5),np.uint8)
    gray = cv2.dilate(gray,kernel,iterations = 10)
    gray = cv2.erode(gray,kernel,iterations=15)
    gray = cv2.dilate(gray,kernel,iterations = 3)
    plt.imshow(gray,cmap='gray');
    plt.xticks([]);
    plt.yticks([]);
    
    y,x = np.where(gray == 255)
    y_index = np.argmin(y)
    x_coord = x[y_index]
    gray[0:,0:x_coord] = 0
    plt.imshow(gray,cmap='gray');
    plt.xticks([]);
    plt.yticks([]);
    
    # Top-left
    top_left = (x_coord,y[y_index])
    cv2.circle(color,top_left,5,[0,255,0],-1);
    
    # Bottom-left
    y,x = np.where(gray == 255)
    y_index = np.argmax(y)
    x_coord = x[y_index]
    bottom_left = (x_coord,y[y_index])
    cv2.circle(color,bottom_left,5,[0,255,0],-1);
    
    # Top-right
    y,x = np.where(gray == 255)
    x_index = np.argmax(x)
    y_coord = y[x_index]
    top_right = (x[x_index],y_coord)
    cv2.circle(color,top_right,5,[0,255,0],-1);
    
    # Bottom-right
    for y in range(top_right[1],gray.shape[0],1):
        roi = gray[y:y+1,top_right[0]-11:top_right[0]]
        if np.all((roi == 0)):
            break
    bottom_right = (top_right[0],y)
    cv2.circle(color,bottom_right,5,[0,255,0],-1);
    plt.imshow(color);
    plt.xticks([]);
    plt.yticks([]);