当前位置: 首页 > news >正文

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_path='road_2.png'image=cv2.imread(image_path)gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)# 图像预处理blurred=cv2.GaussianBlur(gray,(5,5),0)# 使用 CLAHE 增强对比度clahe=cv2.createCLAHE(clipLimit=2.0,tileGridSize=(8,8))enhanced=clahe.apply(blurred)# 二值化:提取裂缝_,binary=cv2.threshold(enhanced,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)# 形态学操作:去噪 + 连接裂缝kernel=cv2.getStructuringElement(cv2.MORPH_RECT,(3,3))# 开运算:去除小噪点opening=cv2.morphologyEx(binary,cv2.MORPH_OPEN,kernel,iterations=2)# 闭运算:连接断裂的细小裂缝closing=cv2.morphologyEx(opening,cv2.MORPH_CLOSE,kernel,iterations=3)# 轮廓检测:提取裂缝区域contours,_=cv2.findContours(closing,cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)# 创建一个掩膜,用于画出最终的裂缝区域crack_mask=np.zeros_like(gray)# 过滤小区域,假设小于 min_area 的为噪声min_area=50forcntincontours:ifcv2.contourArea(cnt)>min_area:cv2.drawContours(crack_mask,[cnt],-1,255,thickness=cv2.FILLED)# 统计裂缝像素crack_pixel_count=np.sum(crack_mask==255)total_pixels=crack_mask.size crack_ratio=crack_pixel_count/total_pixels# 设定阈值crack_threshold=1000# 判断并打印结果ifcrack_pixel_count>crack_threshold:print("该道路图像中存在裂缝")else:print("该道路图像中未发现明显裂缝")print(f"检测到的裂缝像素数:{crack_pixel_count},占比约:{crack_ratio:.4%}")# 在原图上标记result=image.copy()result[crack_mask==255]=[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,cmap='gray')plt.title('灰度图'),plt.axis('off')plt.subplot(2,3,3),plt.imshow(enhanced,cmap='gray')plt.title('增强后(CLAHE)'),plt.axis('off')plt.subplot(2,3,4),plt.imshow(binary,cmap='gray')plt.title('二值化图像'),plt.axis('off')plt.subplot(2,3,5),plt.imshow(closing,cmap='gray')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.jsqmd.com/news/491718/

相关文章:

  • 2026美国投资移民机构排名及综合实力解析 - 品牌排行榜
  • 商城系统开发流程,如何搭建自己的商城 - 码云数智
  • 2026必入!全肤质适配沐浴露TOP1,常天然香到骨子里 - 资讯焦点
  • 第七届人工智能、网络与信息技术国际学术会议(AINIT 2026)
  • 2026年美国投资移民公司哪家好?行业服务机构对比参考 - 品牌排行榜
  • [学习笔记]grpo——逃课与统计学的魅力时刻
  • 2026四川广告加工优质服务商推荐榜 - 资讯焦点
  • 2026年箱包包胶织带厂家推荐:PVC包胶织带/硅胶包胶织带/户外包胶织带厂家精选 - 品牌推荐官
  • OpenClaw 实战:让AI 页面“秒开即用”,实现 Vibecoding 真正闭环
  • 摆脱浏览器书签混乱!Fenrus+cpolar解锁公网访问新玩法
  • 数字化运营平台功能对比,助你做出明智决策,生态型电商零售/电商新零售平台/OMO模式电商零售,数字化运营平台推荐分析 - 品牌推荐师
  • Flink状态管理与Checkpoint深度调优指南:从原理到实战
  • JAVA-Web后端学习1 Maven
  • 微信小程序制作平台有哪些? - 码云数智
  • 如何制作微信小程序,新手也能搭建 - 码云数智
  • C语言lesson6
  • 书匠策AI:问卷设计领域的“匠心”与“智心”之争
  • 2026美国移民机构哪家靠谱?行业资深机构推荐 - 品牌排行榜
  • 核医学防护器材厂家优选:诚信辐射实力稳居第一 - 深度智识库
  • 数据类型之——变量
  • fs-cli连接到不同的freeSwitch
  • 小程序商城制作平台深度剖析:码云数智、有赞、微盟 - 码云数智
  • 用Selenium操控寺庙:香火钱自动分账系统
  • 2026年玻璃钢盐酸储罐厂家推荐:酸碱储罐/卧式储罐/FRP/PP储罐/现场缠绕储罐专业供应 - 品牌推荐官
  • MySQL 索引下推(Index Condition Pushdown, ICP)机制详解
  • 2026年护理考试TOP5押题率高机构最新排名揭晓
  • 计算机毕业设计java基于人脸识别的医疗保险系统的设计与实现 基于面部识别技术的智慧医保服务平台的设计与开发 融合生物特征识别的医疗健康保险管理系统的构建与实现
  • 清洁用具实测电路图两例
  • 2026年聚氨酯同步带厂家推荐榜:同步带、同步带轮的高性价比之选 - 深度智识库
  • javafx中能有异步调用业务方法吗