OpenCV官方文档学习记录(14)
2014-12-12 21:52
543 查看
sobel边缘检测(导数运算)
主要函数Sobel()
应用高斯变换减少图像噪声;
Soblel函数用于计算横向和纵向梯度,
ddepth是图像深度,这里使用CV_16S防止溢出(这里的图像是CV_8U);
1,0或是0,1代表选择的是梯度方向;
3为计算梯度的矩阵的大小;
其余参数是使用的均为默认值。
为了将图像转换回CV_8U,需要使用convertScaleAbs(grad_y,abs_grad_y);
为了将两幅图像合并显示,使用addWeighted()函数,如果我没记错的话,参数0是delta值,就是在叠加像素上附加的值:
abs_grad_x,abs_grad_y,grad三幅图像如下:
如果看不真切:
同时,我们也可以使用Scharr函数进行三阶kernel运算,但是效果就差强人人意了:
代码大同小异:
以上。
附加:代码中使用的矩阵:
主要函数Sobel()
#include<opencv2/opencv.hpp> #include<iostream> #include<string> using namespace std; using namespace cv; void showImg(const string &win_name,const Mat &img) { namedWindow(win_name,CV_WINDOW_AUTOSIZE); imshow(win_name,img); } int main(int argc,char **argv) { if((argc-2)!=0) return -1; Mat src=imread(argv[1]); if(src.empty()) return -2; GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT); showImg("Src",src); Mat src_gray; cvtColor(src,src_gray,CV_RGB2GRAY); Mat grad; Mat grad_x,grad_y; Mat abs_grad_x,abs_grad_y; int ddepth=CV_16S; int delta=0; int scale=1; Sobel(src_gray,grad_x,ddepth,1,0,3,scale,delta,BORDER_DEFAULT); convertScaleAbs(grad_x,abs_grad_x); Sobel(src_gray,grad_y,ddepth,0,1,3,scale,delta,BORDER_DEFAULT); convertScaleAbs(grad_y,abs_grad_y); addWeighted(abs_grad_x,0.5,abs_grad_y,0.5,0,grad); showImg("Reault",grad); waitKey(); return 0; }
应用高斯变换减少图像噪声;
Soblel函数用于计算横向和纵向梯度,
ddepth是图像深度,这里使用CV_16S防止溢出(这里的图像是CV_8U);
1,0或是0,1代表选择的是梯度方向;
3为计算梯度的矩阵的大小;
其余参数是使用的均为默认值。
为了将图像转换回CV_8U,需要使用convertScaleAbs(grad_y,abs_grad_y);
为了将两幅图像合并显示,使用addWeighted()函数,如果我没记错的话,参数0是delta值,就是在叠加像素上附加的值:
abs_grad_x,abs_grad_y,grad三幅图像如下:
如果看不真切:
同时,我们也可以使用Scharr函数进行三阶kernel运算,但是效果就差强人人意了:
代码大同小异:
#include<opencv2/opencv.hpp> #include<iostream> #include<string> using namespace std; using namespace cv; void showImg(const string &win_name,const Mat &img) { namedWindow(win_name,CV_WINDOW_AUTOSIZE); imshow(win_name,img); } int main(int argc,char **argv) { if((argc-2)!=0) return -1; Mat src=imread(argv[1]); if(src.empty()) return -2; GaussianBlur(src,src,Size(3,3),0,0,BORDER_DEFAULT); showImg("Src",src); Mat src_gray; cvtColor(src,src_gray,CV_RGB2GRAY); Mat grad; Mat grad_x,grad_y; Mat abs_grad_x,abs_grad_y; int ddepth=CV_16S; int delta=0; int scale=1; Scharr(src_gray,grad_x,ddepth,1,0,scale,delta,BORDER_DEFAULT); convertScaleAbs(grad_x,abs_grad_x); showImg("X",abs_grad_x); Scharr(src_gray,grad_y,ddepth,0,1,scale,delta,BORDER_DEFAULT); convertScaleAbs(grad_y,abs_grad_y); showImg("Y",abs_grad_y); addWeighted(abs_grad_x,0.5,abs_grad_y,0.5,0,grad); showImg("Reault",grad); waitKey(); return 0; }
以上。
附加:代码中使用的矩阵:
相关文章推荐
- OpenCV官方文档学习记录(2)
- OpenCV官方文档学习记录(7)
- OpenCV官方文档学习记录(3)
- OpenCV官方文档学习记录(16)
- OpenCV官方文档学习记录(18)
- OpenCV官方文档学习记录(5)
- OpenCV官方文档学习记录(13)
- OpenCV官方文档学习记录(9)
- OpenCV官方文档学习记录(6)
- OpenCV官方文档学习记录(11)
- OpenCV官方文档学习记录(12)
- OpenCV官方文档学习记录(20)
- OpenCV官方文档学习记录(17)
- OpenCV官方文档学习记录(10)
- OpenCV官方文档学习记录(8)
- OpenCV官方文档学习记录(4)
- OpenCV官方文档学习记录(1)
- OpenCV官方文档学习记录(19)
- OpenCV官方文档学习记录(15)
- swift 2.0官方文档学习记录