您的位置:首页 > 运维架构

opencv学习笔记(三) 边缘检测

2017-10-20 10:02 369 查看

Canny 算子

cv::Mat src = cv::imread("1.jpg");
if (!src.data)
{
cout << "error" << endl;
return -1;
}
cv::Mat gray, dst;
//转换为灰度图像
cv::cvtColor(src, gray, CV_BGR2GRAY);
//使用3*3内核来降噪
cv::blur(gray, gray, cv::Size(3, 3));
//使用Canny算子,
cv::Canny(gray,//输入图像
dst, //输出图像
40, //滞后性低阙值
120, //滞后性高阙值,推荐的高低阙值为2:1至3:1之间
3);//应用Sobel算子的孔径大小
cv::imshow("原图", src);
cv::imshow("Canny 效果图",dst);
cv::waitKey(0);


Sobel算子

cv::Mat src = cv::imread("1.jpg");
if (!src.data)
{
cout << "error" << endl;
return -1;
}
cv::Mat grad_x,grad_y;
cv::Mat abs_grad_x, abs_grad_y;
cv::Mat dst;
//求x方向的梯度
cv::Sobel(src,//输入图像
grad_x,//输出图像
CV_16S,//输出图像的深度,由输入图像的深度来决定
1, //x方向上的差分阶数
0, //y方向上的差分阶数
3, //Sobel的核大小,必须取1,3,5,7
1); //图像缩放因子
cv::convertScaleAbs(grad_x, abs_grad_x);
//求y方向的梯度
cv::Sobel(src, grad_y, CV_16S, 1, 0, 3, 1);
cv::convertScaleAbs(grad_y, abs_grad_y);
//合并梯度
cv::addWeighted(abs_grad_x, 0.5, abs_grad_y, 0.5, 0, dst);
cv::imshow("原图", src);
cv::imshow("Sobel 效果图",dst);
cv::waitKey(0);


Laplacian算子

让原图减去它的Laplacian算子可以增强对比度

cv::Mat src = cv::imread("1.jpg");
if (!src.data)
{
cout << "error" << endl;
return -1;
}

cv::Mat gray,dst,abs_dst;
//高斯滤波
cv::GaussianBlur(src, src, cv::Size(3, 3),0,0);
//转换为灰度图
cv::cvtColor(src, gray, CV_BGR2GRAY);
//使用Laplace函数
cv::Laplacian(gray,//输入图像,要为单通道8位图像
dst, //输出图像
CV_16S, //输出图像的深度
3, //计算二阶导数的滤波器的孔径大小
1);//比例因子
//计算绝对值,并将结果转换为8位
cv::convertScaleAbs(dst, abs_dst);
cv::imshow("原图", gray);
cv::imshow("Laplace 效果图", abs_dst);
cv::waitKey(0);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv