【OpenCV入门】第一篇 OpenCV概述及入门

本篇主要介绍OpenCV的基本概念和相关的基本函数。

一、OPenCV的概念和结构

OpenCV:开源的计算机视觉库,一般用C和C++ 编写

OpenCV的结构共分为五个部分,分别是图像处理和视觉算法(CV)、机器学习库(ML)、图像和视频输入/输出库(HighGUI)、基本结构和算法,XML支持,绘图函数(CXCORE)以及CVAUx模块,其中前四个模块结构如图所示:


在该图中并没有包括CVAUx,CVAUx中一般存放即将被淘汰的算法与函数(如基于嵌入式的隐式马尔可夫模型的人脸识别算法),同时也有一些实验性的算法和函数(如背景和前景的分割)。

二、一些常用的函数

显示图像

cvLaodImage():cvLaodImg()函数是一个高层调用接口,它通过文件名确认被加载的文件类型,并且该函数将自动分配图像数据 结构所需的内存

cvNamedWindow():cvNamedWindow()函数也是一个高层调用接口,由HIghGUI库提供,用于在屏幕上创建一个窗口,将被显  示的图像包含于窗口中,该函数的第一个参数指定了窗口的标题,第二个参数定义了窗口的属性,可设置为                               0(默认值)或者cv_Window_AUTOSIZE,设置为0时,窗口大小不因图像大小而改变;当设置为                                               cv_Window_AUTOSIZE时,随着图像大小而改变

cvShowImage():cvShowImage()用于在一个已经创建的窗口显示图像,第一个参数确定在哪个已存在的窗口显示,当该方法被   调用时,该窗口将被重新绘制,图像也会显示在窗口中

cvWaitKey():cvWaitKey()函数的作用是使程序暂停,当参数设置为一个正数时,程序将暂停一段时间;当参数为负数或0时,程   将等待用户触发按钮操作

cvReleaseImage():cvRealeaseImage()用于执行释放内存操作

cvDestoryWindow():cvDestoryWindow()用于销毁窗口

播放AVI文件

cvCreateFileCapture():cvCrearteFileCapter()通过参数设置确定要读入的AVI文件

cvQueryFrame():cvQueryFrame()的参数为从vCapter结构的指针,将下一帧视频载入内存,返回一个对应当前帧的指针

视频播放控制

cvSetCaptureProperty():cvSetCaptureProperty()允许设置Capture对象的各种属性,CV_CAP_PROP_POS_FRAMES表示以帧数 读取数据,可以AVI——RATIO代替FRAMES,此时表示按照视频长度比例读取视频

cvGetCaptureProperty():cvGetCVaptureProperty()表示从Capture中查询数据

cvCreateTrackbar():借助cvCreateTrackbar(),我们设置滚动条的名称,并且确定滚动条的所属窗口

cvCreateCameraCapture():cvCreateCameraCapture()通过参数设置确定读入的摄像设备

cvCreateVideoWriter():cvCraterVdieoWriter()用于创建视频设备逐帧将视频流写入视频文件,写入结束后由cvReleaseVdieoWriter()释放资源,第一个参数确定新建视频文件的名称,第二个参数是视频压缩的编码格式,后两个参数是指定播放的帧率和视频图像的大小

三、小试牛刀——对一张图片进行变换

首先我们举一个简单的例子,用于显示一个图像,那么,

代码如下:

#include"highgui.h"

int main(int argc,char** argv) {
	IplImage* img = cvLoadImage("E:/1.jpg");

	cvNamedWindow("E1", 0);

	cvShowImage("E1", img);

	cvWaitKey(0);

	cvReleaseImage(&img);

	cvDestroyWindow("E1");

最终的执行效果如下:


接着,我们对整个图像进行复杂一点的变换:

#include"highgui.h"

IplImage* doPyrDown(IplImage* in) {
	assert(in->width % 2 == 0 && in->height % 2 == 0);
	IplImage* out = cvCreateImage(cvSize(in->width / 2, in->height / 2), in->depth, in->nChannels);
	cvPyrDown(in, out);
	return out;
}

IplImage* doCanny(IplImage* in, double lowThresh, double highThesh, double aperture) {
	if (in->nChannels != 1)
		return 0;
	IplImage* out = cvCreateImage(cvSize(in->width, in->height), IPL_DEPTH_8U, 1);
	cvCanny(in, out, lowThresh, highThesh, aperture);
	return out;
}

int main(int argc, char** argv) {
	IplImage* in;
	IplImage* out;
	in = cvLoadImage("E:/1.jpg");
	out = doPyrDown(in);
	out = doPyrDown(out);
	out = doCanny(out, 10, 100, 3);
	cvNamedWindow("E2", 0);
	cvShowImage("E2", out);
	cvWaitKey(0);
	cvReleaseImage(&out);
	cvDestroyWindow("E2");
}
这一个部分到这里就结束了!


  • 16
    点赞
  • 118
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值