带噪图像中含障碍物的裸片边缘轮廓检测问题求助
问题描述
我正尝试检测图像中的裸片(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
相关产品推荐
相关产品推荐

