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




posted on 2017-04-23 20:33  yutingliuyl  阅读(11885)  评论(0编辑  收藏  举报