• openCV实例:Canny边缘检测


    http://blog.sina.com.cn/s/blog_737adf530100z0jk.html

    在第一次使用openCV程序成功对图像进行打开后,现在开始试验第二个例程试验:Canny边缘检测

        这里算法原理和具体编程语句都先不管,因为作为一名新手(反正我是这么感觉的),拿些现成的程序跑出效果才是让人很有feel的。

        先贴下原代码:


     

     
    #include "cv.hpp"
    #include "cxcore.hpp"
    #include "opencv2highguihighgui.hpp"
     
    using namespace cv;
    using namespace std;
     
    int edgeThresh = 1;
     
    // 声明 原始图片,灰度图片,和 canny边缘图片
    Mat image, cedge;
    Mat gray, edge;
     
    void onTrackbar(int, void*)
    {
    //blur 灰度图片
    blur(gray, edge, Size(3,3));
     
    // Canny 边缘检测
    Canny(gray,edge, edgeThresh, edgeThresh*3, 3);
     
    //全部设为0
    cedge = Scalar::all(0);
     
    //拷贝边缘的象素点
    image.copyTo(cedge, edge);
     
    imshow("Edge map", edge);
     
    }
     
    int main(int argc, char** argv)
    {
     
     
    // 载入图片
    image = imread(argv[1], 1);
     
    // 判断载入图片是否成功
    if(image.empty())
    {
    printf("miss the image file: %d  ", argv[1]);
    return -1;
    }
     
    // 生成灰度图片,因为只有灰度图片才能生成边缘图片
             cedge.create(image.size(), image.type());
    cvtColor(image,gray, CV_BGR2GRAY);
     
    //新建一个窗口
    namedWindow("Edge map", 1);
     
    // 生成一个进度条来控制边缘检测
    createTrackbar("Canny Threshold", "Edge map", &edgeThresh, 100, onTrackbar);
     
    //初始化图像
    onTrackbar(0,0);
     
    waitKey(0);
     
    return 0;
    }}

        这个是openCV中文论坛上的源代码C++版本,木有一点改动。但是出现以下错误:

    错误1.

    1>d:program filesmicrosoft visual studio 10.0my projectopencv est est2 est2.cpp(72): fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "StdAfx.h"”?
    1>
    1>生成失败。
    这个错误很好解决的了,因为使用预编译,却没有找到标准头文件:stdAfx.h,虽然我们真的不需要用它,但是为了方便加上该语句就好了。

    错误2.

    openCV实例:Canny边缘检测

    参见http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=15046&p=59244&hilit=tbb_debug.dll#p59244,按照论坛中所给的网址,下载一个tbb包,将tbb_debug.dll解压到D:Program Filesopencvuildcommon bbia32vc10(这是我的安装目录)即可。

    错误3.

    哈哈,代码结尾多了个},删掉就好啦。

    错误4.

    编译都顺利通过了,现在一Debugging就发现

    openCV实例:Canny边缘检测

        很简单,例程估计用cmd来运行main(),参数在命令行中都敲进去了。直接运行debug电脑发现缺少必要参数肯定不干。仔细看下 int argc, char** argv ,第一个参数发现没用着,可以直接删掉。后面是个指向char指针的指针,程序中是用来打开文件用的,这好办,自己给他在程序中指一个呗:

    const char* imagename = "lena.jpg";
     
     // 载入图片
     image = imread(imagename, 1);
     
     // 判断载入图片是否成功
     if(image.empty())
     {
      printf("miss the image file: %d ");
      return -1;
     }

    printf后面的argv[1],没什么实际作用,删除。这下程序就跑通了呗,实际效果如下:

    openCV实例:Canny边缘检测

    openCV实例:Canny边缘检测 

    OK!!!!

        其实这些错误只要我们认真读懂错误提示,兵来将挡,水来土掩,再加上网络的资源就能够很容易解决openCV实例:Canny边缘检测

        期待明天有新进展!!

  • 相关阅读:
    npm 操作
    vue 下拉框选中不显示的问题
    VUE项目中遇到的Bug总结
    Websocket练手
    Mysql 去重取最新的一条数据
    C# 一列数的规则如下:1、1、2、3、5、8、13..…...求第30位数是多少,用递归算法实现
    冒泡排序 升序 降序(笔试)
    Sql语句查询成绩大全(Mysql,sqlserver,oracle)常遇笔试题
    C# ,.net 对比两个List的方法 亲测
    C#当前时间加、减指定时间
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/4871414.html
Copyright © 2020-2023  润新知