OpenCV提供了几种常见的图像边缘检测算法,包括Sobel算子、Scharr算子、Laplacian算子和Canny边缘检测算法。下面分别介绍这些算法及其实现方法。
- Sobel算子 Sobel算子是一种常见的图像边缘检测算法,其原理是通过对图像进行卷积操作,计算出图像在x和y方向上的梯度。OpenCV提供了cv::Sobel函数来实现Sobel算子。
示例:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {Mat image = imread("lena.jpg");if (image.empty()) {cout << "Could not open or find the image" << endl;return -1;}// 对图像进行Sobel边缘检测Mat grayImage, sobelX, sobelY, absSobelX, absSobelY, sobelImage;cvtColor(image, grayImage, COLOR_BGR2GRAY);Sobel(grayImage, sobelX, CV_16S, 1, 0);Sobel(grayImage, sobelY, CV_16S, 0, 1);convertScaleAbs(sobelX, absSobelX);convertScaleAbs(sobelY, absSobelY);addWeighted(absSobelX, 0.5, absSobelY, 0.5, 0, sobelImage);namedWindow("Original Image", WINDOW_NORMAL);imshow("Original Image", image);namedWindow("Sobel Image", WINDOW_NORMAL);imshow("Sobel Image", sobelImage);waitKey(0);return 0;
}
在上面的示例中,我们使用cv::Sobel函数来实现Sobel算子,然后将x方向和y方向的梯度加权求和,得到最终的边缘图像。
- Scharr算子 Scharr算子是Sobel算子的增强版,它可以更好地检测图像的边缘。OpenCV提供了cv::Scharr函数来实现Scharr算子。
示例:
#include <opencv2/opencv.hpp>
#include <iostream>using namespace cv;
using namespace std;int main() {Mat image = imread("lena.jpg");if (image.empty()) {cout << "Could not open or find the image" << endl;return -1;}// 对图像进行Scharr边缘检测Mat grayImage, scharrX, scharrY, absScharrX, absScharrY, scharrImage;cvtColor(image, grayImage, COLOR_BGR2GRAY);Scharr(grayImage, scharrX, CV_16S, 1, 0);Scharr(grayImage, scharrY, CV_16S, 0, 1);convertScaleAbs(scharrX, absScharrX);convertScaleAbs(scharrY, absScharrY);addWeighted(absScharrX, 0.5, absScharrY, 0.5, 0, scharrImage);
免费分享一些我整理的人工智能学习资料给大家,整理了很久,非常全面。包括一些人工智能基础入门视频+AI常用框架实战视频、计算机视觉、机器学习、图像识别、NLP、OpenCV、YOLO、pytorch、深度学习与神经网络等视频、课件源码、国内外知名精华资源、AI热门论文等。
下面是部分截图,点击文末名片关注我的公众号【AI技术星球】发送暗号 321 领取(一定要发暗号 321)
目录
一、人工智能免费视频课程和项目
二、人工智能必读书籍
三、人工智能论文合集
四、机器学习+计算机视觉基础算法教程
五、深度学习机器学习速查表(共26张)
学好人工智能,要多看书,多动手,多实践,要想提高自己的水平,一定要学会沉下心来慢慢的系统学习,最终才能有所收获。