int main()
{
// 读取原始图片
Mat image= cv::imread("lena.jpg",0);
// 定义5X5LOG模板
Mat mask=(Mat_(5,5)<<-2,-4,-4,-4,-2,
-4, 0, 8, 0,-4,
-4, 8,24, 8,-4,
-4, 0, 8, 0,-4,
-2,-4,-4,-4,-2 );
// LOG模板对原始图片卷积
Mat laplace;
filter2D(image,laplace,image.depth (),mask);
for(int i=1;i<=laplace.cols-2;i++)
for(int j=1;j<=laplace.rows-2;j++)
if(laplace.at<uchar>(j,i)*laplace.at<uchar>(j-1,i)<0 || laplace.at<uchar>(j,i)*laplace.at<uchar>(j+1,i)<0
|| laplace.at<uchar>(j,i)*laplace.at<uchar>(j,i-1)<0 || laplace.at<uchar>(j,i)*laplace.at<uchar>(j,i+1)<0)
laplace.at<uchar>(j,i)=0;
else
laplace.at<uchar>(j,i)=255;
namedWindow("LOG边缘");
imshow("LOG边缘",laplace);
waitKey(10000000);
return 0;
f(laplace.at(j,i)laplace.at(j-1,i)(j,i)laplace.at(j+1,i) || laplace.at(j,i)laplace.at(j,i-1)(j,i)laplace.at(j,i+1) laplace.at(j,i)=0;
else
laplace.at(j,i)=255;
滤波用filter就行了,怎么还有上面的代码部分?
后面:
Mat img = imread(imageName, CV_LOAD_IMAGE_COLOR);
imread的函数原型是:Mat imread( const string& filename, int flags=1 );
Mat是OpenCV里的一个数据结构,在这里我们定义一个Mat类型的变量img,用于保存读入的图像,在本文开始有写到,我们用imread函数来读取图像,第一个字段标识图像的文件名(包括扩展名),第二个字段用于指定读入图像的颜色和深度,它的取值可以有以下几种:
1) CV_LOAD_IMAGE_UNCHANGED (<0),以原始图像读取(包括alpha通道),
2) CV_LOAD_IMAGE_GRAYSCALE ( 0),以灰度图像读取
3) CV_LOAD_IMAGE_COLOR (>0),以RGB格式读取
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。