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

低分辨率去模糊内核图像矩形宽度估计及OpenCV轮廓检测问题排查

问题原因

  • 缺少二值化预处理:cv2.findContours 仅支持输入二值图像(像素值只有0和255),直接传入普通灰度/彩色图像会导致轮廓识别完全失准
  • 前后景匹配错误:OpenCV默认识别白色前景、黑色背景的轮廓,你的内核图像里内核是深色、背景是浅色,直接查找的话会把整张图像的外框当成唯一的白色前景轮廓
  • 轮廓筛选逻辑有问题:当前代码没有过滤无效噪声轮廓,当轮廓列表只有整图一个元素时,np.argmin自然会返回整图的轮廓

修正后可运行代码

import cv2
import numpy as np

# 读入图像并预处理
img = cv2.imread('替换为你的内核图像本地路径')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 二值化+反色,让内核变成白色前景,若亮度不合适可调整阈值127,或使用下方OTSU自适应阈值
# _, binary = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY_INV | cv2.THRESH_OTSU)
_, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

# 查找最外层轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)

# 筛选面积接近5*5=25的有效轮廓,可根据实际情况调整面积阈值范围
valid_cnt = None
for c in contours:
    area = cv2.contourArea(c)
    if 20 < area < 30:
        valid_cnt = c
        break

if valid_cnt is not None:
    x,y,w,h = cv2.boundingRect(valid_cnt)
    print(f"内核边界框参数:宽{w},高{h},左上角坐标({x}, {y})")
    # 绘制边界框并展示
    cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
    cv2.imshow('识别结果',img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
else:
    print("未识别到符合尺寸的内核区域,请调整二值化阈值或面积筛选范围")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:27:03