一、目标
学习如何使用opencv中的函数,学习对图像进行边缘检测的操作,学习Sobel()函数的使用
二、函数说明
函数原型:
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 );
参数详解:
src:源图像
dst:目标图像。
ddepth:输出图像的深度。
dx:x 方向上的差分阶数。
dy:y 方向上的差分阶数。
ksize:有默认值3,表示Sobel核的大小。必须取1,3,5或7。
scale:计算导数值时可选的缩放因子,默认值是1。
delta:有默认值可忽略。
borderType:有默认值可忽略。
三、程序代码
#include "cv.h" // OpenCV 文件头
#include "highgui.h"
#include "opencv2/opencv.hpp"
#include "opencv2/imgproc.hpp"
#include <iostream>
#include <string>
using namespace cv;
using namespace std;
int main(int argc, char *argv[])
{
Mat m_SrcImg;
m_SrcImg = imread("C:\\Users\\lidabao\\Desktop\\image\\1\\LENA1.bmp", -1);
namedWindow("原图像", 1);
imshow("原图像", m_SrcImg);
Mat m_ResImg;
Mat dst_x, dst_y;
//Sobel边缘检测
Sobel(m_SrcImg, dst_x, m_SrcImg.depth(), 1, 0); //X方向梯度
Sobel(m_SrcImg, dst_y, m_SrcImg.depth(), 0, 1); //Y方向梯度
convertScaleAbs(dst_x, dst_x);
convertScaleAbs(dst_y, dst_y);
addWeighted(dst_x, 0.5, dst_y, 0.5, 0, m_ResImg);//合并梯度(近似)
namedWindow("Sobel边缘检测", 1);
imshow("Sobel边缘检测", m_ResImg);
waitKey(0);
}
四、结果
程序运行如下图:
五、注意
正确的配置opencv
正确使用Sobel()函数