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头文件中声明的,因此如果程序中需要使用,则必须在开头包含头文件
[cpp] view plaincopy
- #include <highgui.h>
CvvImage对应CImage宏:
[cpp] view plaincopy
- #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