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頭文件中聲明的,因此如果程序中需要使用,則必須在開頭包含頭文件
CvvImage對應CImage宏:
注意事項:
1.由于CImage太常見, 很容易造成沖突,因此建議不要使用該宏(可以直接刪去此宏定義)。
2.參數中含有HDC(注:一種windows系統下定義的變量類型,用來描述設備描述表的句柄類型)類型的并不能保證移植到其他平臺,例如Show/DrawToHDC等。
OpenCV 2.2.0版本中,CvvImage類不見了...為了能夠繼續使用這個類,下面把這個類的源代碼貼出來,使用的時候將該代碼加入到工程中便可以使用了。為了方便切換OpenCV的版本,這里用到了一些條件編譯宏,來保證代碼的靈活性。
代碼見:
http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx