概述
#include<opencv.hpp>
#include<highgui.hpp>
using namespace std;
using namespace cv;
/*
在边缘检测中,常用的一种模板是Sobel 算子。
Sobel 算子有两个,一个是检测水平边缘的 ;
另一个是检测垂直边缘的 。与Prewitt算子相比,
Sobel算子对于像素的位置的影响做了加权,
可以降低边缘模糊程度,因此效果更好。
由于Sobel算子是滤波算子的形式,
用于提取边缘,可以利用快速卷积函数, 简单有效,
因此应用广泛。美中不足的是,Sobel算子并没有将
图像的主体与背景严格地区分开来,换言之就是Sobel
算子没有基于图像灰度进行处理,由于Sobel算子没有
严格地模拟人的视觉生理特征,所以提取的图像轮廓
有时并不能令人满意。
*/
void main()
{
/*
//Canny 算子
Mat img = imread("jack1.jpg");
Mat edge, gray;
cvtColor(img,gray,CV_RGB2GRAY);
imshow("gray", gray);
blur(gray, edge, Size(3,3));
Canny(edge,edge,50,100,3);
imshow("edge",edge);
*/
//--------------------------------------------
//sober
/*
void Sobel(InputArray src, OutputArray dst, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT )
函数参数解释:
InputArray src:输入的原图像,Mat类型
OutputArray dst:输出的边缘检测结果图像,Mat型,大小与原图像相同。
int ddepth:输出图像的深度,针对不同的输入图像,输出目标图像有不同的深度,具体组合如下:
- 若src.depth() = CV_8U, 取ddepth =-1/CV_16S/CV_32F/CV_64F
- 若src.depth() = CV_16U/CV_16S, 取ddepth =-1/CV_32F/CV_64F
- 若src.depth() = CV_32F, 取ddepth =-1/CV_32F/CV_64F
- 若src.depth() = CV_64F, 取ddepth = -1/CV_64F
注:ddepth =-1时,代表输出图像与输入图像相同的深度。
int dx:int类型dx,x 方向上的差分阶数,1或0
int dy:int类型dy,y 方向上的差分阶数,1或0
其中,dx=1,dy=0,表示计算X方向的导数,检测出的是垂直方向上的边缘;dx=0,dy=1,表示计算Y方向的导数,检测出的是水平方向上的边缘。
int ksize:为进行边缘检测时的模板大小为ksize*ksize,取值为1、3、5和7,其中默认值为3。特殊情况:ksize=1时,采用的模板为3*1或1*3。
当ksize=3时,Sobel内核可能产生比较明显的误差,此时,可以使用 Scharr 函数,该函数仅作用于大小为3的内核。具有跟sobel一样的速度,但结果更精确,其内核为:
*/
Mat img = imread("jack1.jpg");
Mat grad_x, grad_y;
Mat abs_x, abs_y, dst;
//X方向的梯度
Sobel(img,grad_x,CV_16S,1,0,3,1,1,BORDER_DEFAULT);
convertScaleAbs(grad_x, abs_x);
imshow("abs_x", abs_x);
//Y方向的梯度
Sobel(img, grad_y, CV_16S, 0, 1, 3, 1, 1, BORDER_DEFAULT);
convertScaleAbs(grad_y, abs_y);
imshow("abs_y", abs_y);
//按照权重叠加
addWeighted(abs_x,0.5, abs_y,0.5,0,dst);
imshow("dst",dst);
waitKey(0);
return;
}
最后
以上就是无辜大船为你收集整理的opencv-5 边缘检测Canny和sober的全部内容,希望文章能够帮你解决opencv-5 边缘检测Canny和sober所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复