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