zoukankan      html  css  js  c++  java
  • 图像处理的学习

    前两天学习了c++,感觉一直学习着也不是办法,于是今天看了看opencv的论坛,看到了一个MFC跟opencv的结合。里面有一个例子,于是下下来,下面就根据这个例子学习MFC,还可以学习图像处理跟opencv。好,第一个反应就是编译运行这个软件。

    首先的是安装opencv1.0.

    具体参考是

    http://www.opencv.org.cn/index.php/VC6%E4%B8%8B%E5%AE%89%E8%A3%85%E4%B8%8E%E9%85%8D%E7%BD%AEOpenCV1.0

    发下例程链接:

    http://www.opencv.org.cn/index.php/%E5%9C%A8MFC%E4%B8%AD%E4%BD%BF%E7%94%A8OpenCV

    调试了这个程序。会出现如下的一系列问题,具体参考了

    http://www.cnblogs.com/mlv5/archive/2011/02/25/1964355.html

    发现学习是一个发现问题解决问题的一个过程,想这么一个问题,很有可能网上就找不到任何资料,而这个问题就需要我们好好的分析,而这个能力就要我们培养。

    1、第一个问题,也许是MFC初学者常犯的错误:fatal error C1083: Cannot open precompiled header file: 'Release/CVMFC.pch': No such file or directory

    属于MFC基本问题,只需要执行build->rebuild all即可,应该是与StdAxf这系列文件有关。原因应该还复杂一些,但是现在我只注意到这一个。

    2、当编译通过时,出现了如下错误

    Linking...
    CameraDSA.obj : error LNK2001: unresolved external symbol _IID_ISampleGrabber
    CameraDSA.obj : error LNK2001: unresolved external symbol _CLSID_NullRenderer
    CameraDSA.obj : error LNK2001: unresolved external symbol _CLSID_SampleGrabber
    CameraDSA.obj : error LNK2001: unresolved external symbol _LOOK_UPSTREAM_ONLY
    CameraDSA.obj : error LNK2001: unresolved external symbol _CLSID_CaptureGraphBuilder2
    CameraDSA.obj : error LNK2001: unresolved external symbol _IID_ICaptureGraphBuilder2
    Release/CVMFC.exe : fatal error LNK1120: 6 unresolved externals
    Error executing link.exe.
    CVMFC.exe - 7 error(s), 0 warning(s)

    可以看出,是和CameraDSA.cpp有关。而CameraDSA.cpp只引用了一个头文件以及库,在程序中预处理代码如下

    #include "stdafx.h"                         //  2010.8.14 修改
    #pragma comment(lib,"Strmiids.lib") 

    可以看出,这个程序需要用例程中的DirectShow\Lib文件夹下的strmiid.lib文件。当我们在tools->option->directories中的lib file中把此文件夹添加到最后时,我们惊奇地发现,继续编译仍然是这7个错误。

    究竟是否使用了这个库文件,我们可以通过修改库文件名称来判断,将此句改为:

    #pragma comment(lib,"Strmiids1.lib") 
    LINK : fatal error LNK1104: cannot open file "Strmiids1.lib"

    看来VC++的确能找到strmiids.lib这个文件。

    而究竟例程中包含的这个库文件strmiid.lib是否含有_IID_ISampleGrabber这些外部符号呢?可以在windows中的cmd模式下通过这条命令来分析strmiid.lib文件:

    C:\Program Files\Microsoft Visual Studio\VC98\Bin>dumpbin f:\CVMFC\DirectShow\Lib\strmiids.lib /all f:\a.txt

    即lib文件的主要信息都打印到了a.txt中。

    显示如下:

    Dump of file f:\CVMFC\DirectShow\Lib\strmiids.lib
    File Type: LIBRARY
    Archive member name at 8: /               
    3DEDB7C8 time/date Wed Dec 04 16:07:36 2002
             uid
             gid
           0 mode
        5AA7 size
    correct header end
        854 public symbols
      ...
         B83A _IID_ISampleGrabber
      ...

    既然例程中包含的strmiid.lib含有这些外部符号,那么可能的原因只有一个,就是windows系统SDK包含了strmiid.lib,而这货因为版本过高而在VC++6.0中无法支持,但VC++6.0检查到C:\Program Files\Microsoft Visual Studio\VC98\LIB中的strmiid.lib发现不兼容,就只报出这7个错误,不向下查找了自备的strmiid.lib了。

    解决方法非常简单,但非常有用:就是在tools->option中的lib file把例程的lib文件夹前置到最顶头,就发现这7个错误消失了。

    3、最后一个问题比较简单,网上也有相应的答案

    could not execute Invalid directory
    win32 error 267

    方法:分别设置program->setting中的Release和Debug中的 可执行调试的话 和 工作目录 一致即可。

  • 相关阅读:
    10. Regular Expression Matching
    9. Palindrome Number (考虑负数的情况)
    8. String to Integer (整数的溢出)
    7. Reverse Integer (整数的溢出)
    LeetCode Minimum Size Subarray Sum
    LeetCode Course Schedule II
    Linux 文件缓存 (一)
    LeetCode Tries Prefix Tree
    Linux : lsof 命令
    LeetCode Binary Tree Right Side View
  • 原文地址:https://www.cnblogs.com/fengbing/p/2548679.html
Copyright © 2011-2022 走看看