求助:如何用Python有效检测玻璃样品孔洞图像的边缘?
玻璃半穿透孔洞的低对比度图像边缘检测问题
我在检测玻璃样品上半穿透孔洞的图像边缘时遇到了困难。每张图像包含玻璃样品上切割出的部分孔洞,肉眼可清晰区分玻璃区域与孔洞区域,但所有尝试的边缘检测方法效果都不理想。我认为核心原因是玻璃与孔洞之间对比度不足——孔洞未穿透玻璃全厚度,底部残留的玻璃会将光线散射回相机,进一步拉低了对比度。
已尝试的图像处理方法
- 模糊处理(高斯模糊、双边模糊)
- 图像锐化
- 对比度调整
- Mean Shift滤波
- 自适应阈值化
- Canny边缘检测
- Sobel边缘检测
- Watershed分割
拍摄条件限制
拍摄使用工业相机搭配LED环形光源,该光源仅支持开关操作,无法调整光照方向或亮度。尝试调整不同曝光时间与模拟增益后,对比度并未得到有效改善。
当前代码片段
import cv2 image = cv2.imread(r'path/to/images') blurred = cv2.GaussianBlur(image, (7, 7), 9) gray = cv2.cvtColor(blurred, cv2.COLOR_BGR2GRAY) thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 71, 5) edges = cv2.Canny(thresh, 100, 200) contours, _ = cv2.findContours( edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) output_image = image.copy() for contour in contours: cv2.drawContours(output_image, [contour], -1, (0, 255, 0), 2) cv2.imshow('Circle Edge', cv2.resize(output_image, (1000, 1000))) cv2.waitKey(0) cv2.destroyAllWindows()
目前检测到的边缘会以绿色绘制在原始图像上,但效果不佳。
恳请各位提供有效的边缘检测方案,无论是图像处理算法优化、编程实现思路还是拍摄条件改进建议,都非常感谢!
内容的提问来源于stack exchange,提问作者ladies
相关产品推荐
相关产品推荐

