opencv的C語言接口和C++接口差別(入門篇)


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





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM