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

带噪图像中含障碍物的裸片边缘轮廓检测问题求助

问题描述

我正尝试检测图像中的裸片(die)边缘轮廓,但图像右上角存在一处障碍物,导致当前检测结果不符合预期。

当前实现代码
import numpy as np
import cv2
import time
import glob
import os

def process_img(img):
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    gray = cv2.GaussianBlur(gray, (15, 15), 1)
    ret, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
    
    #th1 = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 17, 2)

    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    th1 = cv2.morphologyEx(th1, cv2.MORPH_OPEN, kernel)
    th1 = cv2.morphologyEx(th1, cv2.MORPH_CLOSE, kernel)

    edge = cv2.Canny(th1, 150, 255)
    return th1, img, edge


def get_roi(img, binary):
    """
    img: source pic
    binary: canny
    """
    # 寻找轮廓
    contours, _ = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    max_area = 0
    temp = 0
    for cnt in range(len(contours)):
        xxx = cv2.contourArea(contours[cnt])
        if xxx > max_area:
            max_area = xxx
            temp = cnt

    series = contours[temp]
    x, y, w, h = cv2.boundingRect(series)
    p = cv2.arcLength(series, True)
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.drawContours(img, [series], 0, (255, 0, 255), 2)

    return img


def die_select(img: np.ndarray, img_template: np.ndarray = None) -> np.ndarray:
    th1, img, edge = process_img(img)
    img = get_roi(img, edge)
    return img
当前检测结果

当前结果图

期望检测结果

期望结果图


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 15:25:20