首页 > 编程知识 正文

sobel算子经典例题,sobel算子原理matlab

时间:2023-05-04 14:06:36 阅读:216180 作者:3039

Sobel算子是区分X,Y两种运算子的,再通过将Sobel运算子与原图进行卷积运算之后得出两个矩阵所含信息也不相同,对于复杂图形很难看出两者之间的差距,对于简单的图形

则可以看出较明显差异,通过运算后得出


可以看出X,Y只能检测出各个方向上的信息,所以最后还是需要通过相加得到完整的边缘信息。

#include<iostream>#include<opencv2/opencv.hpp>using namespace std;using namespace cv;void conv2D(cv::Mat& src, cv::Mat& dst, cv::Mat kernel, int ddepth, cv::Point anchor = cv::Point(-1, -1), int delta = 0, int borderType = cv::BORDER_DEFAULT) {cv::Mat kernelFlip;cv::flip(kernel, kernelFlip, -1);cv::filter2D(src, dst, ddepth, kernelFlip, anchor, delta, borderType);}int main(){Mat srcImage=imread("D:\测试用图片\线.jfif");imshow("原图", srcImage);Mat kernel = (Mat_<char>(3,3)<<1,2,1,0,0,0,-1,-2,-1);Mat kerne2 = (Mat_<char>(3, 3) << -1, 0, 1, -2, 0, 2, -1, 0, 1);Mat sobelXImage, dstImageX,dstImageY,sobelYImage;filter2D(srcImage, sobelXImage, srcImage.depth(), kernel);filter2D(srcImage, sobelYImage, srcImage.depth(), kerne2);convertScaleAbs(sobelXImage, dstImageX);convertScaleAbs(sobelYImage, dstImageY);imshow("运算后X图片", dstImageX);imshow("运算后Y图片", dstImageY);Mat dstImage;addWeighted(dstImageX, 0.5, dstImageY, 0.5, 0, dstImage);imshow("sobel算子最终运算结果", dstImage);waitKey(0);}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。