师弟最近要使用四旋翼进行桥梁探伤,主要是用运动相机搭载在四轴上检测裂缝,就顺便搞了一下有关于裂缝检测的图像处理。
算法比较简单,没有考虑太多复杂情况,在简单墙面背景下基本可以找到裂缝并框定。
基本思路为,先转换彩色图为灰度图,然后进行自适应局部阈值化,目的是为了减少光照与阴影对阈值的影响,然后进行膨胀操作,尽量放大凸显裂缝,在用中值滤波平滑一下,去除一些高频噪声。然后调用寻找轮廓函数寻找所有轮廓,寻找连通域最大的那个轮廓,然后在原图画框即可。
先上算法代码,之后还有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++)