只用来记录学习笔记
Sobel算子作用:提取边缘像素
原理:做一阶导数:
Mat xgrad, ygrad;
Sobel(gray_src, xgrad, CV_16S, 1, 0, 3);
//gray_src:灰度图片
//xgrad:
//CV_16S:深度,不能用-1,只能用深度比CV_8U大的:-1/CV_16S/CV_32F/CV_64F。
//1:x方向几阶导数
//0:y方向几阶导数
//3:SOBEL算子kernel大小,必须是1、3、5、7
Sobel(gray_src, ygrad, CV_16S, 0, 1, 3);
convertScaleAbs(xgrad, xgrad); //增强
convertScaleAbs(ygrad, ygrad); //增强
imshow("xgrad", xgrad);
imshow("ygrad", ygrad);
addWeighted(xgrad, 0.5, ygrad, 0.5, 0, dst3); //合并图像
imshow("final image", dst3);
效果图:
自己写合并方法:
Mat xygrad = Mat(xgrad.size(), xgrad.type());
int width = xgrad.cols;
int height = ygrad.rows;
for (int row = 0; row < height; row++) {
for (int col = 0; col < width; col++) {
int xg = xgrad.at<uchar>(row, col);
int yg = ygrad.at<uchar>(row, col);
int xy = xg + yg;
xygrad.at<uchar>(row, col) = saturate_cast<uchar>(xy);
}
}
imshow("final2", xygrad);
效果: