OpenCV 案例六【道路裂缝检测】
目录一、环境准备1、Anaconda 环境配置2、图像处理方法介绍二、代码案例三、运行效果一、环境准备1、Anaconda 环境配置环境配置参考前面章节OpenCV 案例一【人脸检测】2、图像处理方法介绍主要用到了自适应阈值二值化Adaptive Thresholding方法主要作用是对经过预处理去噪、增强对比度的灰度图像采用自适应阈值方法将其转换为二值图像目的是突出图像中的裂缝。如图片中的裂缝会被设置为白色255而背景会是黑色0。由于代码中使用了 cv2.THRESH_BINARY_INV进行反转因为裂缝通常是黑色的最终效果是裂缝被设置成白色。二、代码案例importcv2importnumpyasnpimportmatplotlib.pyplotasplt# 设置中文字体plt.rcParams[font.sans-serif][SimHei]plt.rcParams[axes.unicode_minus]False# 读取图像并灰度化image_pathroad_2.pngimagecv2.imread(image_path)graycv2.cvtColor(image,cv2.COLOR_BGR2GRAY)# 图像预处理blurredcv2.GaussianBlur(gray,(5,5),0)# 使用 CLAHE 增强对比度clahecv2.createCLAHE(clipLimit2.0,tileGridSize(8,8))enhancedclahe.apply(blurred)# 二值化提取裂缝_,binarycv2.threshold(enhanced,0,255,cv2.THRESH_BINARY_INVcv2.THRESH_OTSU)# 形态学操作去噪 连接裂缝kernelcv2.getStructuringElement(cv2.MORPH_RECT,(3,3))# 开运算去除小噪点openingcv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel,iterations2)# 闭运算连接断裂的细小裂缝closingcv2.morphologyEx(opening,cv2.MORPH_CLOSE,kernel,iterations3)# 轮廓检测提取裂缝区域contours,_cv2.findContours(closing,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# 创建一个掩膜用于画出最终的裂缝区域crack_masknp.zeros_like(gray)# 过滤小区域假设小于 min_area 的为噪声min_area50forcntincontours:ifcv2.contourArea(cnt)min_area:cv2.drawContours(crack_mask,[cnt],-1,255,thicknesscv2.FILLED)# 统计裂缝像素crack_pixel_countnp.sum(crack_mask255)total_pixelscrack_mask.size crack_ratiocrack_pixel_count/total_pixels# 设定阈值crack_threshold1000# 判断并打印结果ifcrack_pixel_countcrack_threshold:print(该道路图像中存在裂缝)else:print(该道路图像中未发现明显裂缝)print(f检测到的裂缝像素数{crack_pixel_count}占比约{crack_ratio:.4%})# 在原图上标记resultimage.copy()result[crack_mask255][0,0,255]# 可视化plt.figure(figsize(15,10))plt.subplot(2,3,1),plt.imshow(cv2.cvtColor(image,cv2.COLOR_BGR2RGB))plt.title(原始图像),plt.axis(off)plt.subplot(2,3,2),plt.imshow(gray,cmapgray)plt.title(灰度图),plt.axis(off)plt.subplot(2,3,3),plt.imshow(enhanced,cmapgray)plt.title(增强后CLAHE),plt.axis(off)plt.subplot(2,3,4),plt.imshow(binary,cmapgray)plt.title(二值化图像),plt.axis(off)plt.subplot(2,3,5),plt.imshow(closing,cmapgray)plt.title(形态学处理后),plt.axis(off)plt.subplot(2,3,6),plt.imshow(cv2.cvtColor(result,cv2.COLOR_BGR2RGB))plt.title(检测到的裂缝红色),plt.axis(off)plt.tight_layout()plt.show()三、运行效果
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2420168.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!