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

时间: 2024-08-22 16:08:25

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

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

opencv是一个开源的图像处理库,最经典的1.0版本号提供的接口都是C语言接口. 后来的opencv2.x版本号保留了C语言接口,可是提供了C++接口,当中的C语言接口仅仅是为了向后兼容,而C++接口才是大势所趋. 那么这两者有什么差别呢?今天介绍一下配置过程中的差别. 以opencv2.3.0和vs2008为例.配置时.先要配置包括文件和库文件,然后在系统变量path中加入dll文件.最后再项目属性中加入附加依赖库.我平时用的功能不多.一般加入这几项opencv_core230.lib.op

初识 go 语言:方法,接口及并发

目录 方法,接口及并发 方法 接口 并发 信道 结束语 前言: go语言的第四篇文章,主要讲述go语言中的方法,包括指针,结构体,数组,切片,映射,函数闭包等,每个都提供了示例,可直接运行. 方法,接口及并发 方法 方法就是一类带特殊的接收者(struct)参数的函数 通过 结构体.方法 调用 示例: type city struct { name, address string } func (c city) sysCity() { c.name = "帝都" fmt.Println

go语言碎片整理之接口

接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节. 接口类型 在Go语言中接口(interface)是一种类型,是一种抽象的类型.interface是一组method的集合,是duck-type programming的一种体现.接口做的事情就像是定义一个协议(规则),只要一台机器有洗衣服和甩干的功能,我就称它为洗衣机.不关心属性(数据),只关心行为(方法).为了保护你的Go语言职业生涯,请牢记接口(interface)是一种类型. 为什么

Javascript面向对象特性实现封装、继承、接口详细案例——进级高手篇

Javascript面向对象特性实现(封装.继承.接口) Javascript作为弱类型语言,和Java.php等服务端脚本语言相比,拥有极强的灵活性.对于小型的web需求,在编写javascript时,可以选择面向过程的方式编程,显得高效:但在实际工作中,遇到的项目需求和框架较大的情况下,选择面向对象的方式编程显得尤其重要,Javascript原生语法中没有提供表述面向对象语言特性的关键字和语法(如extends.implement).为了实现这些面向对象的特性,需要额外编写一些代码,如下.

Java基础之集合框架(Collection接口和List接口)

首先我们说说集合有什么作用. 一.集合的作用 1.在类的内部,对数据进行组织: 2.简单而快速的搜索大数量的条目: 3.有的集合接口,提供一系列排列有序的元素,并且可以在序列中间快速的插入或者删除有关元素: 例如:做广播操的时候,可以将学生插入到某排某列,反之也可以叫某排某列中的学生出列. 4.有的集合接口,提供了映射关系,可以通过关键字(key)去快速查找到对应的唯一对象,而这个关键字可以是任意类型. 例如:在吃饭的时候,众多铝饭盒中如何区别是自己的呢?在饭盒上刻独有的标志或贴纸条,这个标志和

转载-- http接口、api接口、RPC接口、RMI、webservice、Restful等概念

http接口.api接口.RPC接口.RMI.webservice.Restful等概念 收藏 Linux一叶 https://my.oschina.net/heavenly/blog/499661 发表于 1年前 阅读 1422 收藏 28 点赞 0 评论 0 摘要: 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当 在这之前一定要好好理解一下接口的含义,我觉得在这一类中接口理解成规则很恰当.         http接口:基于HTTP协议的开发接口.这个并不能排除没

抽象类和接口的联系与区别

抽象类和接口联系与区别 关键字: 抽象类与接口的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java强大的面向对象能力. abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,因此很多开发者在进行抽象类定义时对于 abstract class和interface的选择显得比较随意. 其实,两者之间还是有很大的区别的,对于它们的选择甚至反映出对于

面向对象接口和类的区别

在OOD(面向对象设计)中,经常会用到抽象类或接口,[注:在C++中,没有接口的概念,只有抽象类:而在Java中两者都存在].而在使用过程中,也许会有不少人认为接口和抽象类差不多,然后就想当然地觉得可以相互完全替换.事实上,虽然他们有很多相似点,但也有很大差异. 1.抽象类与接口的出现条件 在面向对象的概念中,我们知道所有的对象都是通过类来描绘的,但是反过来却不是这样.并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类.抽象类往往用来表征我们

第十五节(多态,接口和抽象类的区别,类之间的关系)

多态的定义: 1. 多态是同一个行为具有多个不同表现形式或形态的能力 2. 多态性是对象多种表现形式的体现 比如我们说"宠物"这个对象,它就有很多不同的表达或实现,比如有小猫.小狗.蜥蜴等等. 那么我到宠物店说"请给我一只宠物",服务员给我小猫.小狗或者蜥蜴都可以,我们就说"宠物" 这个对象就具备多态性. 多态的条件是:有继承或实现,有方法覆盖或实现,父类对象(接口) 指向子类对象 public class Animal{ // 成员方法 pub