基于OpenCV的混凝土裂纹检测

article/2024/12/5 8:30:36

基于OpenCV的混凝土裂纹检测

前言

这是我发的第一次博客,有什么建议大家可以给我留言,感激不尽!
接下来,我们进入正题。

一、使用函数库

numpy, opencv, heapq, skimage.morphology

二、使用步骤

1.初步预处理

初步预处理包括:灰度阈值处理,高斯滤波平滑处理,滤波除燥。代码如下:

import cv2
import numpy as npType = 0   # 阈值处理方式
Value = 0  # 使用的阈值
T = 0
V = 0
def onType(a):Type = cv2.getTrackbarPos(tType, windowName)Value = cv2.getTrackbarPos(tValue, windowName)ret, dst = cv2.threshold(o, Value, 255, Type)cv2.imshow(windowName, dst)global TT = Typedef onValue(a):Type = cv2.getTrackbarPos(tType, windowName)Value = cv2.getTrackbarPos(tValue, windowName)ret, dst = cv2.threshold(o, Value, 255, Type)cv2.imshow(windowName, dst)global VV = Valueo = cv2.imread(r'E:\database\CrackForest-dataset-master\image\001.jpg')
# 灰度转换
gray = cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)
# cv2.imshow('gray', gray)
windowName = 'output'
cv2.namedWindow(windowName)
cv2.imshow(windowName, gray)
# 构建滚动条
tType = 'Type'
tValue = 'tValue'
cv2.createTrackbar(tType, windowName, 0, 4, onType)
cv2.createTrackbar(tValue, windowName, 0, 255, onValue)
while 1:k = 0xFF & cv2.waitKey(1)if k == 27:breakelif k == ord('s'):realType = TrealValue = Vretval, img = cv2.threshold(gray, realValue, 255, realType)cv2.imshow('output.jpg', img)cv2.imwrite('output.jpg', img)output = cv2.imread('E:/bishe/daima/output.jpg')print(output.shape)# 高斯滤波平滑处理gauss = cv2.GaussianBlur(output, (3, 3), 0, 0)# cv2.imshow('gauss',gauss)# 滤波除噪k = np.ones((5, 5), np.uint8)_open = cv2.morphologyEx(gauss, cv2.MORPH_OPEN, k)_close = cv2.morphologyEx(_open, cv2.MORPH_CLOSE, k)cv2.imshow('_close', _close)cv2.imwrite('output2.jpg', _close)
cv2.destroyAllWindows()

直接运行代码后,会出现一个窗口。拖动Type,Value滚动条,将图片进行阈值处理,其中Type是阈值处理方式,Value是阈值,如下图
原始图像:在这里插入图片描述处理后(Type=1:处理方式为cv2.THRESH_BINARY_INV;Value=53:可以根据不同的照片自行调整参数,直到自己满意为止。)
在这里插入图片描述

2.提取最大连通域

代码如下:

import cv2
import numpy as np
import heapq
o = cv2.imread('E:/bishe/daima/output2.jpg')
gray = cv2.cvtColor(o, cv2.COLOR_BGR2GRAY)
ret, binary = cv2.threshold(gray, 50, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
cv2.imshow('original', o)
n = len(contours)
area = []
for i in range(n):area.append(cv2.contourArea(contours[i]))
max_num_index_list = map(area.index, heapq.nlargest(1, area))
Max = list(max_num_index_list)[0]
print(Max)
contoursImg = np.zeros(o.shape, np.uint8)
contoursImg = cv2.drawContours(contoursImg, contours, Max, (255, 255, 255), -1)
cv2.imshow('the crack', contoursImg)
cv2.imwrite('the crack.jpg', contoursImg)
cv2.waitKey()
cv2.destroyAllWindows()

效果如图:
在这里插入图片描述


3.提取裂纹骨架

代码如下:

import cv2
from skimage import morphology
import numpy as np
img = cv2.imread(r'E:\bishe\daima\the crack.jpg', 0)
kernel = np.ones((3, 3), np.uint8)
dilation = cv2.dilate(img, kernel)
cv2.imshow('dilation', dilation)
erosion = cv2.erode(dilation, kernel, iterations=4)
cv2.imshow('erosion',erosion)
dst = cv2.bitwise_not(erosion)
_, binary = cv2.threshold(dst, 100, 255, cv2.THRESH_BINARY_INV)
# cv2.imwrite("binary.png",binary)
binary[binary == 255] = 1
skeleton0 = morphology.skeletonize(binary)
skeleton = skeleton0.astype(np.uint8)*255
cv2.imshow('bone', skeleton)
cv2.imwrite('bone.jpg', skeleton)
cv2.waitKey()
cv2.destroyAllWindows()

效果如图:
在这里插入图片描述

总结

最后想说几句,为了更好的学习,所以来这里分享我的学习成果,更好地发现自己的不足之处,还希望看到这篇文章的大佬们有什么建议还请给我留言,感激不尽!!!


http://chatgpt.dhexx.cn/article/Ky4LVjeQ.shtml

相关文章

【图像识别】基于计算机视觉实现路面裂缝检测识别系统matlab代码

1 简介 随着公路与铁路事业的飞速发展,各类车辆和里程的增加,铁路的一次次提速,都对路面产生了巨大的压力。不论是公路路面还是铁路路面,路面裂纹都能随处可见,由路面裂纹造成的交通事故时有发生。研究路面裂纹检测方法对于路面维护、交通安全具有极其重大意义。近年来,路面裂…

基于计算机视觉的裂纹检测方案

点击上方“小白学视觉”,选择加"星标"或“置顶” 重磅干货,第一时间送达01. 数据集 我们首先需要从互联网上获取包含墙壁裂缝的图像(URL格式)数据。总共包含1428张图像:其中一半是新的且未损坏的墙壁&#x…

halcon裂纹缺陷检测

针对这一类表面的检测就不能单纯依靠帧差或者背景差来完成,因为背景的纹理不可能和当前图像的纹理完全相同。 方法一—局部阈值分割 一、局部阈值分割 1、gen_sin_bandpass–局部阈值分割 dyn_threshold(OrigImage, ThresholdImage : RegionDynThresh : Offset,…

使用 Python 进行深度学习以进行裂纹检测

使用 Python 进行深度学习以进行裂纹检测 问题陈述数据集准备训练模型结论参考 问题陈述 虽然新技术已经改变了我们生活的方方面面,在建筑领域似乎牛逼正在努力追赶。目前,建筑物的结构状况仍然主要是人工检查。简单来说,即使现在需要检查结…

Halcon-表面检测-----裂纹检测

对应示例程序: detect_mura_defects_blur.hdev 目标:实例实现LCD上有很多污点干扰下,检测LCD的印痕检测。 思路为:对LCD图像进行拆分,提取RGB三个分量。 对B分量进行处理,将其转换为频域内图像&#xff0…

图像中的裂纹检测

01. 数据集 我们首先需要从互联网上获取包含墙壁裂缝的图像(URL格式)数据。总共包含1428张图像:其中一半是新的且未损坏的墙壁;其余部分显示了各种尺寸和类型的裂缝。 第一步:读取图像,并调整大小。 images = []for url in tqdm.tqdm(df[content]): response = req…

html图片与文字轮播,我是这样写文字轮播的

原标题:我是这样写文字轮播的 作者:一半水一半冰 原文:http://www.cnblogs.com/jingh/p/6377736.html 1写在前面 最近总结下之前的工作,才恍然发现时间的流逝永远是悄无声息的,离开学校那座象牙塔已经也有大半年的时间…

IOS 文本文字下面添加下划线

2019独角兽企业重金招聘Python工程师标准>>> UILabel *infolabel [[UILabel alloc] initWithFrame:CGRectMake(30*RATIO,260*RATIO, self.view.bounds.size.width-60*RATIO, 20*RATIO)];infolabel.text "infoimcba.com";infolabel.textColor [UIColor …

html语言 特效字,用HTML和CSS实现酷炫的文字特效

前言 马上我们就要进入下一个阶段,也就是HTML和CSS实现前端界面的阶段了,想必很多小伙伴都想给自己的页面加点酷炫的特效,今天,我就给大家整理了一些非常酷炫的文字特效来装点你的页面!有些是从网络上找的,…

python抓取图片数字_python 实现识别图片上的数字

Python 3.6 版本 Pytesseract 图像验证码识别 环境: (1) win7 64位 (2) Idea (3) python 3.6 (4) pip install pillow <&nbsp>pip install pytesseract (5) 识别引擎tesseract-ocr 安装 安装tesseract-ocr的识别引擎 第一步:下载安装包 我下载的是64位,根据自…

html改变字母间距,css怎么调整字体间距?

在前端开发的过程中&#xff0c;有时候可能会出现字与字之间比较紧凑&#xff0c;我们可以通过css设置文字间隔让字与字之间的距离大一点&#xff0c;下面我们来看一下如何使用css调整字体间距。 css中解决字与字间隔的方法是使用css样式属性letter-spacing&#xff0c;letter-…

html ul 加点,HTML ul compact 属性 | 菜鸟教程

HTML compact 属性 实例 在无序列表中使用compact属性&#xff1a; CoffeeTeaMilk 尝试一下 浏览器支持 所有主流浏览器都不支持 compact 属性。 定义和用法 HTML5 不支持 compact 属性。 请使用 CSS 替代。 的 compact 属性在 HTML 4.01 已废弃。 compact 属性是一个 boole…

css怎么将文字底下设置颜色,css如何设置文字颜色

css设置文字颜色的方法&#xff1a;1、在DIV标签内使用color颜色样式&#xff0c;代码为【 www.php.cn 】&#xff1b;2、在CSS选择器中使用color颜色样式CSS代码。 本教程操作环境&#xff1a;windows7系统、css3版&#xff0c;DELL G3电脑。 css设置文字颜色的方法&#xff1…

markdown/LaTeX中在字母下方输入圆点的方法

看下面的关联代数的乘法定义, 如果需要在 z z z下面加上一个点, 应该怎么做呢? 下面是一个采用\stackrel命令的方法 {\huge{}_{\stackrel{{}_{{}_{{}_{{}_z}}}}{{}^\cdot}}}\!\leq y⋅ z ⁣ ≤ y {\huge{}_{\stackrel{{}_{{}_{{}_{{}_z}}}}{{}^\cdot}}}\!\leq y ⋅z​​​​​…

html 字前边自动加点,css实现文字越界加点点点显示,并且后面紧跟一个图标

文字越界添加...显比抖朋要插支一圈不者地示 在HTML页面上&#xff0c;会遇到当文字长度超出一定长度的时候&#xff0c;将超出的部分显示为...的情况&#xff0c;这个功能很好实现&#xff0c;很多人都可以直接写出来。 示例代码&#xff1a; .demo { display: block; text-ov…

css文字下方加点

1、border-bottom: 1px dashed #333; 2、 text-emphasis: dot; text-emphasis-position: under; -webkit-text-emphasis: dot; -webkit-text-emphasis-position: under;

css+html 在文字下面加点。

效果 代码&#xff1a; 通过伪类的方式在content里面加点。然后定位在文字的下面。 <head> <style> .wavy { position: relative; } .wavy:before { content: "."; position: absolute; top: 10p…

linux 问题-——退出vi编辑器 wq失效

退出linux的vi编辑器时&#xff0c;先按左上角的esc按键&#xff0c;再输出输入命令 保存不退出w强制保存但不退出w!保存并退出wq强制保存并退出wq&#xff01;不保存退出q不保存并强制退出q! 出现以下问题&#xff1a; esc退出后&#xff0c;不能成功输出上述命令退出。 原因…

vi编辑器 末尾添加_vi编辑器操作指令分享

vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,因此您可以在其他任何介绍vi的地方进一步了解它。Vi也是Linux中最基本的文本编…

vi编辑器

目录 一、vim编辑器概念 1、为什么用vim编辑器&#xff1f; 2、vim的格式 二、vim的模式 1、命令模式 1.1退出vim快捷键 1.2光标跳转 1.3常用操作命令 2、输入模式 3、末行模式 一、vim编辑器概念 1、为什么用vim编辑器&#xff1f; Linux 系统中“一切皆文件”&…