只用來記錄學習筆記
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);
效果: