opencv是一個開源的圖像處理庫,最經典的1.0版本號提供的接口都是C語言接口。
后來的opencv2.x版本號保留了C語言接口,可是提供了C++接口,當中的C語言接口僅僅是為了向后兼容,而C++接口才是大勢所趨。
那么這兩者有什么差別呢?今天介紹一下配置過程中的差別。
以opencv2.3.0和vs2008為例。配置時。先要配置包括文件和庫文件,然后在系統變量path中加入dll文件。最后再項目屬性中加入附加依賴庫。我平時用的功能不多。一般加入這幾項opencv_core230.lib。opencv_highgui230.lib。opencv_imgproc230.lib,opencv_video230.lib。須要說明的是,我使用的是C語言接口。什么是C語言接口,舉個樣例。讀取視頻文件的小程序。
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; int main() { CvCapture *pCapture=NULL; pCapture=cvCreateFileCapture("50254000.avi"); IplImage *pFrame=NULL; cvNamedWindow("sor",0); while (pFrame = cvQueryFrame(pCapture)) { cvShowImage("sor",pFrame); cvWaitKey(10); } return 0; }請原諒我沒有釋放pCapture和顯示窗體。反正呢,這里用到的opencv函數。就是C語言接口。
今天突發奇想,想要用C++接口寫個程序,結果碰到了問題。我還是照曾經的方法進行配置。
代碼例如以下:
#include <opencv2/opencv.hpp> #include <iostream> using namespace std; using namespace cv; int main() { VideoCapture capture("2014y12m17d08h21f58sYI.avi"); if (!capture.isOpened()) { cout << "fail to open the vedio" << endl; return 1; } Mat frame; namedWindow("test",0); while (capture.read(frame)) { imshow("test",frame); if (waitKey(10) == 27) { return 0; } } return 0; }相同是讀取一段視頻的程序,編譯能通過,可是執行到第一句就出錯。后來發現,是由於C語言接口和C++接口所用的庫文件是不一樣的。因此配置的時候。在項目屬性的附加依賴性里應該換成這幾項:opencv_core230d.lib,opencv_highgui230d.lib。opencv_imgproc230d.lib,opencv_video230d.lib,這樣以后。執行正常。
當然,這僅僅是兩者在配置時候的一點小小的差別,如今opencv的C++接口提供了很多其它更先進的算法,而且向比C語言接口改動了一些bug,因此在使用opencv的過程中。應該多用C++接口。