opencv进行简单的裂缝检测
来源:互联网 发布:阳春网络问政平台官网 编辑:程序博客网 时间:2024/06/09 19:57
师弟最近要使用四旋翼进行桥梁探伤,主要是用运动相机搭载在四轴上检测裂缝,就顺便搞了一下有关于裂缝检测的图像处理。
算法比较简单,没有考虑太多复杂情况,在简单墙面背景下基本可以找到裂缝并框定。
基本思路为,先转换彩色图为灰度图,然后进行自适应局部阈值化,目的是为了减少光照与阴影对阈值的影响,然后进行膨胀操作,尽量放大凸显裂缝,在用中值滤波平滑一下,去除一些高频噪声。然后调用寻找轮廓函数寻找所有轮廓,寻找连通域最大的那个轮廓,然后在原图画框即可。
先上算法代码,之后还有Qt界面加图像传输完整版。
// cracker_find.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <opencv2\opencv.hpp>#include <vector>#include<time.h> using namespace cv;using namespace std;void location(Mat &srcImg,Mat &binImg){ vector< vector<Point> > contours ; if(binImg.data) { findContours(binImg,contours,CV_RETR_EXTERNAL,CV_CHAIN_APPROX_NONE);} if(contours.size() > 1) { double maxArea = 0; vector <Point> maxContour; for(size_t i = 0; i < contours.size(); i++) { double area = contourArea(contours[i]); if (area > maxArea) { maxArea = area; maxContour = contours[i]; } } Rect maxRect; Mat ROI; if (maxContour.size()!=0) { maxRect = boundingRect(maxContour); } rectangle(srcImg, maxRect, cv::Scalar(0,0,255)); }}void preProcessing(Mat &srcImg,Mat &binImg,int elementSize = 7){Mat grayImg;cvtColor(srcImg,grayImg,CV_RGB2GRAY);int blockSize = 25; int constValue = 35; adaptiveThreshold(grayImg, binImg, 255, CV_ADAPTIVE_THRESH_MEAN_C, CV_THRESH_BINARY_INV, blockSize, constValue); //threshold(grayImg,binImg,150,255,THRESH_BINARY_INV);Mat element = getStructuringElement(MORPH_RECT, Size(elementSize, elementSize));dilate(binImg,binImg,element);medianBlur(binImg,binImg,9);}int _tmain(int argc, _TCHAR* argv[]){clock_t start,finish; double totaltime; start=clock();Mat srcImg = imread("D:\\crack.jpg");Mat binImg;preProcessing(srcImg,binImg);imshow("binImg",binImg);location(srcImg,binImg);imshow("ansImg",srcImg);finish=clock(); totaltime=(double)(finish-start)/CLOCKS_PER_SEC; cout<<"\n此程序的运行时间为"<<totaltime<<"秒!"<<endl;//system("pause");waitKey();return 0;}
0 0
- opencv进行简单的裂缝检测
- 基于半交互式的裂缝检测方法
- 使用opencv 进行简单的前向人脸检测
- 使用OpenCV进行目标检测的注意事项
- Opencv之简单的边缘检测
- dataguard 自动裂缝检测和解决
- ios--OpenCV--进行肤色检测
- OpenCV进行斑点检测 impleBlobDetector
- Android平台上利用opencv进行图像的边沿检测
- Android平台上利用opencv进行图像的边沿检测
- Opencv自带的HOG进行行人检测-QT例程
- opencv结合dlib进行人脸特征点的检测
- 基于OpenCV的简单的人脸检测
- OpenCV人脸检测例程的简单应用
- Learning OpenCV: 一个简单的人眼检测程序
- Learning OpenCV: 一个简单的人眼检测程序
- Python和OpenCV简单的人脸检测程序
- OpenCV简单粗糙的指尖检测方法(FingerTips Detection)
- bootstrap ui设计
- 支持Markdown 编辑器平台
- 设置动画播放时间
- jsp页面编码
- mysql存储过程之异常处理篇
- opencv进行简单的裂缝检测
- 机器学习之工程师入门路线
- 了解【信息安全】互联网攻防/渗透、漏洞、安全
- 多目标输出探究
- 最大奇约数
- git 输出颜色设置
- Java 泛型理解(一)
- 大数据系列修炼-Scala课程85
- 1 官方学习文档网址