numpy 查找最接近角的像素

rxztt3cl  于 2023-01-30  发布在  其他
关注(0)|答案(1)|浏览(159)

我有以下问题。我想找到非空像素坐标,是最接近左下角和右上角,分别。
这个函数返回左上角和右下角的坐标,我不知道为什么:

import cv2
import numpy as np

def find_corner_pixels(img):
    # Get image dimensions
    height, width = img.shape[:2]
    
    left_down = (height-1, width-1)
    upper_right = (0, 0)

    for i in range(height):
        for j in range(width):
            #  non-black
            if not np.array_equal(img[i,j], [0,0,0]):
                
                if (i + j) < (left_down[0] + left_down[1]):
                    left_down = (i, j)
                
                if (i + j) > (right_up[0] + right_up[1]):
                    right_up = (i, j)

    return left_down, right_up

你能帮我找出错误吗?
输出明显错误,请参见带有红点的图片,红点应表示角:

gg58donl

gg58donl1#

首先,看起来你的角是错的。我想这些会有用的:

left_down = (width-1, 0)
upper_right = (0, height-1)

我有点搞不懂这些条件是做什么用的,你是在比较像素的附加坐标,还是在比较它们和角点的附加坐标?

if (i + j) < (left_down[0] + left_down[1]):
    left_down = (i, j)
                
if (i + j) > (right_up[0] + right_up[1]):
    right_up = (i, j)

这是唯一有意义的事情,检查

if i < left_down[0] and j > left_down[1]):
    left_down = (i, j)
                
if i < right_up[0] and j > right_up[1]:
    right_up = (i, j)

这将检查找到的像素是否是从右上角更低和更左以及从左下角更高和更右。
如果这不是你的本意,你应该更清楚地描述你所说的“最靠近角落”是什么意思。

相关问题