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++接口。
