posts - 131, comments - 12, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

CImage与OpenCV兼容问题

Posted on 2012-12-24 14:06 盛胜 阅读(2234) 评论(1)  编辑 收藏 引用

http://hi.baidu.com/gildor/item/fca3243bf3133549033edc91
CImage与OpenCV兼容问题

CImage类和OpenCV中的某个类冲突,在配置了OpenCV后,如果创建CImage类,会有如下问题:
error C2872: 'CvvImage' : ambiguous symbol
        could be 'c:\program files\opencv\otherlibs\highgui\highgui.h(438) : CvvImage'
        or 'd:\program files\visual studio 8\vc\atlmfc\include\atlimage.h(68): ATL::CvvImage'

可以考虑修改OpenCV的代码,去掉其中对于CImage的定义。
打开\OpenCV\_make\opencv.sln工程
在OpenCV中,只有两处用到了CImage的定义,
一个是highgui.h line 438; 直接把#define注释掉。
另外一处是image.cpp,line 236 void CImage::DrawToHDC。
改为void CvvImage::

然后重新编译,把掉用opencv CImage的地方改为CvvImage就可以了。有可能有个别工程编不通,如果不是由于修改引起的就没有问题。

2.直接在 OpenCV头文件后
#undef CImage #include <atlimage.h>






opencv 2.0以后的版本

使用OpenCV   highgui.h中定义的CvvImage类可以很好的实现OpenCV和Windows MFC显示接口。由于CvvImage实在highgui.h头文件中声明的,因此如果程序中需要使用,则必须在开头包含头文件

  1. #include <highgui.h>  

CvvImage对应CImage宏:

  1. #define CImage CvvImage   

 

注意事项:

1.由于CImage太常见, 很容易造成冲突,因此建议不要使用该宏(可以直接删去此宏定义)。

2.参数中含有HDC(注:一种windows系统下定义的变量类型,用来描述设备描述表的句柄类型)类型的并不能保证移植到其他平台,例如Show/DrawToHDC等。 

       OpenCV 2.2.0版本中,CvvImage类不见了...为了能够继续使用这个类,下面把这个类的源代码贴出来,使用的时候将该代码加入到工程中便可以使用了。为了方便切换OpenCV的版本,这里用到了一些条件编译宏,来保证代码的灵活性。

代码见:

http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx

Feedback

# re: CImage与OpenCV兼容问题[未登录]  回复  更多评论   

2012-12-28 09:29 by XXX
已验证,可行,感谢博主!!!!!O(∩_∩)O

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理