开发者社区> 问答> 正文

log边缘检测代码及结果如下?是什么地方错了出现这种结果?

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;

展开
收起
a123456678 2016-03-05 14:07:58 1937 0
1 条回答
写回答
取消 提交回答
  • 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格式读取

    2019-07-17 18:53:25
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
PostgresChina2018_赖思超_PostgreSQL10_hash索引的WAL日志修改版final 立即下载
Kubernetes下日志实时采集、存储与计算实践 立即下载
日志数据采集与分析对接 立即下载