基础理论:卷积
1,Robert算子(体现斜对角线放线的差异):
结果图:
2,Sobel算子(体现x方向和y方向的差异)
运行结果(优于Robert算子):
3,拉普拉斯算子
运行结果(较好的保留了轮廓边缘):
#include<opencv2/opencv.hpp>
#include<iostream>
using namespace cv;
using namespace std;
RNG rng(123456);
int i = 1,j=255;
Mat t1, t2,t3,t4,t5,t6;
char *c = "TRY";
void TRY(int, void*);
int main(int agrc, char** agrv) {
t1 = imread("test1.jpg");
if (!t1.data ) {
cout << "WRONG";
return -1;
}
cvtColor(t1, t1, CV_BGR2GRAY);
namedWindow("CANNY", 0);
namedWindow("LA", 0);
namedWindow("SOBEL", 0);
resizeWindow("CANNY", 1000, 200);
resizeWindow("LA", 1000, 200);
resizeWindow("SOBEL", 1000, 200);
resizeWindow("R", 1000, 200);
Mat x = (Mat_<char>(2, 2) << 1, 0, 0, -1);
threshold(t1, t2, i, 255, THRESH_BINARY | THRESH_OTSU);
Canny(t2, t3, 0, 1, 3, false);
Laplacian(t2, t4, -1, 1, 1, 0, BORDER_DEFAULT);
Sobel(t2, t5, -1, 0, 1, 3, 1, 0, BORDER_DEFAULT);
filter2D(t2, t6, -1, x, Point(-1, -1), 0, BORDER_DEFAULT);
imshow("CANNY", t3);
imshow("LA", t4);
imshow("SOBEL", t5);
imshow("R", t6);
waitKey(0);
}