You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻找近左下角与右上角非空像素的函数错误排查求助

问题排查与修正

你的代码存在三个核心错误,导致返回了错误的坐标:


1. 变量名不一致

你初始化了upper_right变量,但后续判断和赋值时误用了未定义的right_up,这会触发NameError,即便没报错也会导致逻辑混乱,必须统一变量名。

2. 初始坐标设置错误

你将left_down初始化为右下角坐标(height-1, width-1),这不是距离左下角最远的参考点,正确的初始值应该设为距离极大的点(或直接用None配合无穷大距离值),确保第一个非黑像素能被选中。

3. 距离判断逻辑完全错误

你用i+j的大小来判断距离,这和目标点的距离毫无关系:

  • 距离左下角(height-1, 0)最近的点,应该计算该点到左下角的距离(比如欧氏距离平方:(i - (height-1))² + (j - 0)²),找最小值;而i+j最小的点是左上角(0,0),所以你的代码会错误地选中左上角。
  • 距离右上角(0, width-1)最近的点,应该计算到右上角的距离(比如欧氏距离平方:(i - 0)² + (j - (width-1))²),找最小值;而i+j最大的点是右下角(height-1, width-1),所以代码会错误地选中右下角。

修正后的代码

import cv2
import numpy as np

def find_corner_pixels(img):
    height, width = img.shape[:2]
    
    # 初始化目标点和最小距离
    closest_bottom_left = None
    min_dist_bl = float('inf')
    closest_top_right = None
    min_dist_tr = float('inf')
    
    # 定义左下角和右上角的坐标
    bottom_left = (height - 1, 0)
    top_right = (0, width - 1)

    for i in range(height):
        for j in range(width):
            # 判断非黑像素
            if not np.array_equal(img[i,j], [0,0,0]):
                # 计算到左下角的欧氏距离平方(避免开根号,提升效率)
                dist_bl = (i - bottom_left[0]) ** 2 + (j - bottom_left[1]) ** 2
                if dist_bl < min_dist_bl:
                    min_dist_bl = dist_bl
                    closest_bottom_left = (i, j)
                
                # 计算到右上角的欧氏距离平方
                dist_tr = (i - top_right[0]) ** 2 + (j - top_right[1]) ** 2
                if dist_tr < min_dist_tr:
                    min_dist_tr = dist_tr
                    closest_top_right = (i, j)

    return closest_bottom_left, closest_top_right

内容的提问来源于stack exchange,提问作者vojtam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 14:30:40