opencv学习日记——图像的边缘检测
1、图像结果
2、代码部分
#include<iostream>
#include<opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main()
{
Mat img = imread("a11.jpeg", IMREAD_ANYCOLOR);
if (img.empty())
{
cout << "输入为空";
return -1;
}
//定义卷积核
//x方向
Mat kernel1 = (Mat_<float>(1, 2) << 1, -1);
Mat kernel2 = (Mat_<float>(1, 3) << 1, 0, -1);
//y方向爱
Mat kernel3 = (Mat_<float>(3, 1) << 1, 0, -1);
//45度方向
Mat kernelxy1 = (Mat_<float>(2, 2) << 1, 0, 0, -1);
Mat kernelxy2 = (Mat_<float>(2, 2) << 0, 1, -1, 0);
Mat result1, result2, result3, result4, result5, result6;
//进行卷积操作
//filter2D(原图, 新图, 生成类型, 卷积核)
filter2D(img, result1, CV_16S, kernel1);
//取绝对值
convertScaleAbs(result1, result1);
filter2D(img, result2, CV_16S, kernel2);
convertScaleAbs(result2, result2);
filter2D(img, result3, CV_16S, kernel3);
convertScaleAbs(result3, result3);
//把两个方向的结果加起来
result6 = result2 + result3;
filter2D(img, result4, CV_16S, kernelxy1);
convertScaleAbs(result4, result4);
filter2D(img, result5, CV_16S, kernelxy2);
convertScaleAbs(result5, result5);
imshow("原图", img);
imshow("水平方向", result1);
imshow("水平方向1", result2);
imshow("竖直方向", result3);
imshow("完整边缘", result2);
imshow("从左上到右", result4);
imshow("从右上到左下", result5);
waitKey(0);
}