CImage類和OpenCV中的某個(gè)類沖突,在配置了OpenCV后,如果創(chuàng)建CImage類,會(huì)有如下問題:
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的代碼,去掉其中對(duì)于CImage的定義。
打開\OpenCV\_make\opencv.sln工程
在OpenCV中,只有兩處用到了CImage的定義,
一個(gè)是highgui.h line 438; 直接把#define注釋掉。
另外一處是image.cpp,line 236 void CImage::DrawToHDC。
改為void CvvImage::
然后重新編譯,把掉用opencv CImage的地方改為CvvImage就可以了。有可能有個(gè)別工程編不通,如果不是由于修改引起的就沒有問題。
2.
直接在 OpenCV頭文件后#undef CImage #include <atlimage.h>
opencv 2.0以后的版本
使用OpenCV highgui.h中定義的CvvImage類可以很好的實(shí)現(xiàn)OpenCV和Windows MFC顯示接口。由于CvvImage實(shí)在highgui.h頭文件中聲明的,因此如果程序中需要使用,則必須在開頭包含頭文件
CvvImage對(duì)應(yīng)CImage宏:
注意事項(xiàng):
1.由于CImage太常見, 很容易造成沖突,因此建議不要使用該宏(可以直接刪去此宏定義)。
2.參數(shù)中含有HDC(注:一種windows系統(tǒng)下定義的變量類型,用來描述設(shè)備描述表的句柄類型)類型的并不能保證移植到其他平臺(tái),例如Show/DrawToHDC等。
OpenCV 2.2.0版本中,CvvImage類不見了...為了能夠繼續(xù)使用這個(gè)類,下面把這個(gè)類的源代碼貼出來,使用的時(shí)候?qū)⒃摯a加入到工程中便可以使用了。為了方便切換OpenCV的版本,這里用到了一些條件編譯宏,來保證代碼的靈活性。
代碼見:
http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx