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

如何使用Python OpenCV获取电子芯片图像中所需的元件ROI

芯片小尺寸元件ROI提取修复方案

你现有代码的核心问题是形态学操作强度过高,直接抹去了小尺寸元件的轮廓,同时缺少轮廓尺寸筛选步骤,导致漏检、误检问题。

参考资料

输入原图

Original Image

当前实现输出

Till now Achieved Result

预期输出效果

This is the result that I am trying to achieve

修改后可运行代码

import cv2
import os

# 加载图像、灰度化、自适应阈值处理
image = cv2.imread('4.jpg')
result = image.copy()
gray = cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
thresh = cv2.adaptiveThreshold(gray,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, 
cv2.THRESH_BINARY_INV,51,9)

# 填充封闭轮廓
cnts = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
for c in cnts:
    cv2.drawContours(thresh, [c], -1, (255,255,255), -1)

# 调整形态学操作参数,降低强度保留小元件
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1)

# 提取轮廓后增加面积过滤,仅保留符合元件尺寸的区域
cnts = cv2.findContours(opening, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cnts = cnts[0] if len(cnts) == 2 else cnts[1]
# 可根据实际元件尺寸调整面积阈值
min_area = 50
max_area = 10000
for c in cnts:
    area = cv2.contourArea(c)
    if min_area < area < max_area:
        x,y,w,h = cv2.boundingRect(c)
        cv2.rectangle(image, (x, y), (x + w, y + h), (36,255,12), 3)

cv2.imshow('thresh', thresh)
cv2.imshow('opening', opening)
cv2.imshow('image', image)
cv2.waitKey()
cv2.destroyAllWindows()

核心修改说明

  • 把原99的形态学核缩小为33,迭代次数从4次调整为1次,避免小尺寸元件的轮廓被过度腐蚀消除
  • 新增轮廓面积过滤逻辑,可根据实际元件的大小调整min_area和max_area参数,过滤掉背景噪声和过大的非元件区域
  • 新增窗口销毁逻辑,避免程序运行后残留窗口进程

运行上述代码即可得到接近预期的ROI标注效果,若存在个别漏检或误检,微调面积阈值和形态学迭代次数即可适配。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 20:06:03