#include "opencv.hpp"
#include "imgproc.hpp"
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cstdio>
#include <stdlib.h>
#include <stdio.h>
//sobel 算子处理后 长度选择
using namespace std;
using namespace cv;
Mat g_srcImage, g_dstImage0, g_dstImage1, g_dstImage2, g_dstImage3, g_dstImage4, g_dstImage5;
int g_nBoxFilterValue = 6;
int g_nMeanBlurValue = 10;
int g_nGaussianBlurValue = 6;
int g_nMedianBlurValue = 10;
int g_nBilateralFilterValue = 10;
static void on_BoxFilter(int, void *);
static void on_MeanBlur(int, void *);
static void on_GaussianBlur(int, void *);
static void on_MedianBlur(int, void *);
static void on_BilateralFilter(int, void *);
double Otsu(Mat &img);
Mat dst, src_gary, detected_edges,gard;
int lowThreshold=80;
int ratio = 3;
int Kernel_size = 3;
int main() {
Mat img = imread("H:\\image\\1.jpg");
if (!img.data) { cout << "cuowu" << endl; return -1; }
Mat img_gray; Mat img2;
g_dstImage0 = img.clone();
g_dstImage1 = img.clone();
g_dstImage2 = img.clone();
g_dstImage3 = img.clone();
g_dstImage4 = img.clone();
g_dstImage5 = img.clone();
double thresh=100;
// GaussianBlur(img, img, Size(3, 3), 0, 0, BORDER_DEFAULT);
//模糊平滑
cvtColor(img, img_gray, COLOR_BGR2GRAY);
//blur(img_gray, img_gray, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1), 4);
//blur(img_gray, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1), 4);
//灰度化
//thresh = Otsu(g_dstImage2);
threshold(img_gray, g_dstImage0, 100, 255, THRESH_BINARY_INV);
threshold(img_gray, g_dstImage1, thresh, 255, THRESH_BINARY_INV);
//二值化分割
/********/
Mat grad_x, grad_y, abs_grad_x, abs_grad_y;
Sobel(img_gray, grad_x, CV_16S, 1, 0, 3,1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_grad_x);
Sobel(img_gray, grad_y, CV_16S, 0, 1, 3,1, 0, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_grad_y);
addWeighted(abs_grad_x, 0.3, abs_grad_y, 0.3, 0, gard);
threshold(gard, detected_edges, 50, 255, THRESH_BINARY);
imshow("name" , detected_edges);
//sobel算子高通滤波
/******
blur(img_gray, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1),4);
//中值滤波-低通滤波
******/
//equalizeHist(g_dstImage2, g_dstImage3);//
//equalizeHist(img_gray, g_dstImage4);//均衡化的前提都是要经过灰度化处理
//直方图均衡化
vector<vector<Point> > contours;
findContours(detected_edges, contours, RETR_TREE, CHAIN_APPROX_SIMPLE);
//drawContours(img, contours, -1, Scalar(0, 255, 0), 1, 8);
/****** ****/
vector<vector<Point> > contours1;
for (int i = 0; i <= contours.size() - 1; i++) {
float Long = arcLength(contours[i], true);
if (Long > 150) {
contours1.push_back(contours[i]);
}
}
drawContours(img, contours1, -1, Scalar(0, 0, 255), 1, 8);
//轮廓标注 基本做法
imshow("img", img);
//imshow("g_dstImage4", g_dstImage4);
waitKey(0);
return 0;
}
/****
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <cstdio>
using namespace cv;
Mat g_srcImage, g_dstImage1, g_dstImage2, g_dstImage3, g_dstImage4, g_dstImage5;
int g_nBoxFilterValue = 6;
int g_nMeanBlurValue = 10;
int g_nGaussianBlurValue = 6;
int g_nMedianBlurValue = 10;
int g_nBilateralFilterValue = 10;
static void on_BoxFilter(int, void *);
static void on_MeanBlur(int, void *);
static void on_GaussianBlur(int, void *);
static void on_MedianBlur(int, void *);
static void on_BilateralFilter(int, void *);
int main() {
//====================载入原图====================
g_srcImage = imread("H:\\image\\1.jpg");
if (!g_srcImage.data) {
printf("no source image!\n");
return false;
}
//==============复制原图到5个Mat类型中==============
g_dstImage1 = g_srcImage.clone();
g_dstImage2 = g_srcImage.clone();
g_dstImage3 = g_srcImage.clone();
g_dstImage4 = g_srcImage.clone();
g_dstImage5 = g_srcImage.clone();
//===================显示原图=====================
namedWindow("0:source image", WINDOW_AUTOSIZE);
imshow("0:source image", g_srcImage);
//================【<1>方框滤波】==================
namedWindow("1:image after box filter", WINDOW_AUTOSIZE);
createTrackbar("内核值:", "1:image after box filter", &g_nBoxFilterValue, 50, on_BoxFilter);
on_MeanBlur(g_nBoxFilterValue, 0);
//================【<2>均值滤波】==================
namedWindow("2:image after mean blur", WINDOW_AUTOSIZE);
createTrackbar("内核值:", "2:image after mean blur", &g_nMeanBlurValue, 50, on_MeanBlur);
on_MeanBlur(g_nMeanBlurValue, 0);
//================【<3>高斯滤波】==================
namedWindow("3:image after gaussian blur", WINDOW_AUTOSIZE);
createTrackbar("内核值:", "3:image after gaussian blur", &g_nGaussianBlurValue, 50, on_GaussianBlur);
on_GaussianBlur(g_nGaussianBlurValue, 0);
//================【<4>中值滤波】==================
namedWindow("4:image after median filter", WINDOW_AUTOSIZE);
createTrackbar("参数值:", "4:image after median filter", &g_nMedianBlurValue, 50, on_MedianBlur);
on_MedianBlur(g_nMedianBlurValue, 0);
//================【<5>双边滤波】==================
namedWindow("5:image after bilateral filter", WINDOW_AUTOSIZE);
createTrackbar("参数值:", "5:image after bilateral filter", &g_nBilateralFilterValue, 50, on_BilateralFilter);
on_BilateralFilter(g_nBilateralFilterValue, 0);
//==================输入'q'结束===================
while (char(waitKey(1)) != 'q') {}
return 0;
}
**/
//==============【on_BoxFilter()函数】================
static void on_BoxFilter(int, void *) {
boxFilter(g_srcImage, g_dstImage1, -1, Size(g_nBoxFilterValue + 1, g_nBoxFilterValue + 1));
imshow("1:image after box filter", g_dstImage1);
}
//==============【on_MeanBlur()函数】=================
static void on_MeanBlur(int, void *) {
blur(g_srcImage, g_dstImage2, Size(g_nMeanBlurValue + 1, g_nMeanBlurValue + 1), Point(-1, -1));
imshow("2:image after mean blur", g_dstImage2);
}
//============【on_GaussianBlur()函数】===============
static void on_GaussianBlur(int, void *) {
GaussianBlur(g_srcImage, g_dstImage3, Size(g_nGaussianBlurValue * 2 + 1, g_nGaussianBlurValue * 2 + 1), 0, 0);
imshow("3:image after gaussian blur", g_dstImage3);
}
//==============【on_MedianBlur()函数】===============
static void on_MedianBlur(int, void *) {
medianBlur(g_srcImage, g_dstImage4, g_nMedianBlurValue * 2 + 1);
imshow("4:image after median filter", g_dstImage4);
}
//============【on_BilateralFilter()函数】============
static void on_BilateralFilter(int, void *) {
bilateralFilter(g_srcImage, g_dstImage5, g_nBilateralFilterValue, g_nBilateralFilterValue * 2, g_nBilateralFilterValue / 2);
imshow("5:image after bilateral filter", g_dstImage5);
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
在Microsoft Visual Studio开发平台上使用OpenCV计算机视觉库对缺陷图像进行包括图像灰度化、图像二值化、均值滤波、高斯滤波、形态学闭操作等图像预处理。然后,对桥梁裂缝图像使用边缘检测算法Sobel算子、Canny边缘检测算子进行边缘检测。最后,对边缘检测后的图形进行孤立点去除方法与缺陷面积特征量计算等图像后处理。(代码来源于本人本科毕业设计的一部分)
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计——基于OpenCV视觉检测程序设计.zip (60个子文件)
毕业设计——基于OpenCV视觉检测程序设计
Project1
Project1
Project1.vcxproj 6KB
Project1.vcxproj.user 165B
x64
Release
Project1.tlog
CL.write.1.tlog 1KB
CL.read.1.tlog 81KB
CL.command.1.tlog 2KB
Project1.lastbuildstate 323B
link.write.1.tlog 1KB
Project1.write.1u.tlog 1KB
link.command.1.tlog 3KB
link.read.1.tlog 9KB
Project1.log 736B
源.obj 3.74MB
vc141.pdb 1.85MB
Project1.vcxproj.filters 948B
源.cpp 7KB
x64
Release
Project1.exe 37KB
Project1.iobj 579KB
Project1.pdb 1.96MB
Project1.ipdb 211KB
Project1.sln 1KB
Demo
Demo
Demo.vcxproj.filters 948B
Demo.vcxproj.user 165B
Demo.vcxproj 6KB
x64
Release
源.obj 3.72MB
Demo.log 716B
Demo.tlog
Demo.write.1u.tlog 2KB
CL.write.1.tlog 564B
CL.read.1.tlog 40KB
CL.command.1.tlog 932B
link.write.1.tlog 1KB
link.command.1.tlog 3KB
link.read.1.tlog 9KB
Demo.lastbuildstate 319B
vc141.pdb 1.84MB
源.cpp 2KB
Demo.sln 1KB
x64
Release
Demo.pdb 1.93MB
Demo.ipdb 179KB
Demo.exe 28KB
Demo.iobj 518KB
Project2
x64
Release
Project2.ipdb 214KB
Project2.iobj 578KB
Project2.pdb 1.96MB
Project2.exe 37KB
Project2.sln 1KB
Project2
Project2.vcxproj.user 165B
Project2.vcxproj 6KB
Project2.vcxproj.filters 948B
x64
Release
Project2.log 736B
Project2.tlog
Project2.write.1u.tlog 1KB
CL.write.1.tlog 1KB
CL.read.1.tlog 81KB
CL.command.1.tlog 2KB
link.write.1.tlog 1KB
Project2.lastbuildstate 323B
link.command.1.tlog 3KB
link.read.1.tlog 10KB
源.obj 3.74MB
vc141.pdb 1.85MB
源.cpp 5KB
共 60 条
- 1
资源评论
TVSTFE
- 粉丝: 14
- 资源: 6
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功