基于OpenCV的图像裁剪:轮廓检测无法识别首张拼接子图问题排查
问题分析与解决
你的代码无法识别第一张子图,大概率是以下几个原因之一:
1. 轮廓过滤条件排除了第一张图
你设置的过滤条件是cv2.contourArea(contour) > 400和0.5 < 高/宽 < 2.4,第一张子图可能不符合这个范围:
- 比如第一张图的宽高比超出了2.4(或低于0.5)
- 或者第一张图的轮廓面积小于400
验证方法:在过滤轮廓前,先打印所有轮廓的面积和宽高比:
for cnt in contours: area = cv2.contourArea(cnt) x, y, w, h = cv2.boundingRect(cnt) ratio = h / w print(f"轮廓面积: {area}, 宽高比: {ratio:.2f}")
根据输出的数值,调整过滤条件的阈值,比如把宽高比上限调到3,或者降低面积阈值到200。
2. 第一张图的轮廓与图像边缘重合,导致未被检测到
如果第一张子图的顶部、左侧和原图边缘完全贴合,cv2.findContours(用RETR_EXTERNAL模式)可能无法识别出完整的轮廓,因为外部轮廓需要被背景包围。
解决方法:给原图添加一圈白色边框,让第一张图的轮廓被边框包围:
image = cv2.imread(r'application_data\input_image\1706004061083.png') # 添加5像素宽的白色边框 image = cv2.copyMakeBorder(image, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=(255, 255, 255)) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 后续代码不变
3. 自适应阈值参数不适合第一张图
自适应阈值的blockSize(11)和C值(10)可能对第一张图的前景背景分离效果不好,导致二值化后第一张图的轮廓丢失。
调整方法:尝试修改这两个参数,比如把blockSize改成21,C改成5,或者换成cv2.ADAPTIVE_THRESH_GAUSSIAN_C模式:
binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 21, 5)
完整调整后的示例代码
import cv2 image = cv2.imread(r'application_data\input_image\1706004061083.png') # 添加白色边框解决边缘轮廓问题 image = cv2.copyMakeBorder(image, 5, 5, 5, 5, cv2.BORDER_CONSTANT, value=(255, 255, 255)) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # 调整自适应阈值参数 binary = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 21, 5) contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) # 放宽过滤条件,根据实际打印的数值调整 filtered_contours = [contour for contour in contours if cv2.contourArea(contour) > 200 and 0.3 < cv2.boundingRect(contour)[3] / cv2.boundingRect(contour)[2] < 3] filtered_contours = sorted(filtered_contours, key=lambda x: cv2.boundingRect(x)[1]) for index, contour in enumerate(filtered_contours): x, y, w, h = cv2.boundingRect(contour) # 裁剪时去掉添加的边框偏移 roi = image[y-5 if y>5 else y : y+h, x-5 if x>5 else x : x+w] cv2.imshow(f'Individual Image {index + 1}', roi) cv2.waitKey(0) cv2.destroyAllWindows()
内容的提问来源于stack exchange,提问作者duyanhhz
相关产品推荐
相关产品推荐

