您的位置:首页 > 编程语言 > C语言/C++

opencv3/C++图像边缘提取方式

2019-12-11 12:11 1316 查看

canny算子实现

使用track bar 调整canny算子参数,提取到合适的图像边缘。

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;

void trackBar(int, void*);
int s1=0,s2=0;
Mat src, dst;
int main()
{
src = imread("E:/image/image/daibola.jpg");
if(src.empty())
{
printf("can not load image \n");
return -1;
}
cvNamedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);
dst = src.clone();
cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
createTrackbar("canny1", "output", &s1, 255, trackBar);
createTrackbar("canny2", "output", &s2, 255, trackBar);
GaussianBlur(src,src,Size(3,3),0);

waitKey();
return 0;
}

void trackBar(int, void*)
{

Canny(src,dst,s1,s2,3);
imshow("output", dst);
}

Sobel算子实现

#include<iostream>
#include<opencv2/opencv.hpp>
using namespace cv;

int main()
{
Mat src, dst;
src = imread("E:/image/image/daibola.jpg");

if(src.empty())
{
printf("can not load image \n");
return -1;
}
dst = Mat::zeros(src.size(), src.type());
cvNamedWindow("input", CV_WINDOW_AUTOSIZE);
imshow("input", src);

Mat kernel = (Mat_<int>(2,2)<<0,1,-1,0);
filter2D(src,dst,-1,kernel,Point(-1,-1),0.0);
Mat xgrad, ygrad;
Sobel(src,xgrad,CV_16S,1,0,3);
Sobel(src,ygrad,CV_16S,0,1,3);
convertScaleAbs(xgrad,xgrad);
convertScaleAbs(ygrad,ygrad);

addWeighted(xgrad,0.5,ygrad,0.5,0,dst);
//addWeighted(dst,0.5,src,1,0,dst);
cvNamedWindow("output", CV_WINDOW_AUTOSIZE);
imshow("output", dst);
waitKey();
return 0;
}

以上这篇opencv3/C++图像边缘提取方式就是小编分享给大家的全部内容了,希望能给大家一个参考

您可能感兴趣的文章:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  opencv3 C++ 图像 边缘
相关文章推荐