Opencv2.4學習::邊緣檢測(4)Roberts運算元
阿新 • • 發佈:2018-12-11
邊緣檢測
1、Sobel
2、Laplace
3、Roberts
4、
Roberts
就是以對角線作為差分的方向來檢測
實現程式碼:
#include<opencv2/core/core.hpp> #include<opencv2/imgproc/imgproc.hpp> #include<opencv2/highgui/highgui.hpp> #include<iostream> using namespace std; using namespace cv; //Roberts運算元實現 Mat roberts(Mat srcImage) { Mat dstImage = srcImage.clone(); int nRows = dstImage.rows; int nCols = dstImage.cols; for (int i = 0; i < nRows - 1; i++){ for (int j = 0; j < nCols - 1; j++){ //根據公式計算 int t1 = (srcImage.at<uchar>(i, j) - srcImage.at<uchar>(i + 1, j + 1))* (srcImage.at<uchar>(i, j) - srcImage.at<uchar>(i + 1, j + 1)); int t2 = (srcImage.at<uchar>(i+1, j) - srcImage.at<uchar>(i , j + 1))* (srcImage.at<uchar>(i+1, j) - srcImage.at<uchar>(i , j + 1)); //計算g(x,y) dstImage.at<uchar>(i, j) = (uchar)sqrt(t1 + t2); } } return dstImage; } void main() { Mat srcImage = imread("F:\\opencv_re_learn\\2.jpg"); if (!srcImage.data){ cout << "falied to read" << endl; system("pause"); return; } Mat srcGray; cvtColor(srcImage, srcGray, CV_BGR2GRAY); //高斯濾波 GaussianBlur(srcGray, srcGray, Size(3, 3), 0, 0, BORDER_DEFAULT); Mat dstImage = roberts(srcGray); imshow("srcImage", srcImage); imshow("dstImage", dstImage); waitKey(0); }
實現效果: