您的位置:首页 > 其它

使用Scharr 算子进行边缘检测

2016-06-02 20:13 441 查看
//Program to detect edges in an image using the threshold Scharr operator
#include <opencv2/opencv.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>
using namespace std;
using namespace cv;
int main()
{
Mat image=imread("E:\\图片\\lena.jpg");
Mat image_blurred;
//blur image with a Gaussian kernel to remove edge noise
GaussianBlur(image,image_blurred,Size(3,3),0,0);
//Convert to gray
Mat image_gray;
cvtColor(image_blurred,image_gray,CV_RGB2GRAY);
//Gradients in X and Y directions
Mat grad_x,grad_y;
Scharr(image_gray,grad_x,CV_32F,1,0);
Scharr(image_gray,grad_x,CV_32F,0,1);
//Calculate overall gradient
pow(grad_x,2,grad_x);
pow(grad_y,2,grad_y);
Mat grad=grad_x+grad_y;
sqrt(grad,grad);
//Display
namedWindow("Original image");
namedWindow("Scharr edges");
//Convert to 8 bit depth for display
Mat edges;
grad.convertTo(edges,CV_8U);
imshow("Original image",image);
imshow("Scharr edges",edges);
while(char(waitKey(1))!='q'){}
return 0;
}

原始图像:



效果图:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: