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

如果没法忘记他,就不要忘记好了。真正的忘记,是不需要努力的。

opencv的C语言接口和C++接口区别(入门篇)

相关文章:

你感兴趣的文章:

标签云: