本篇主要介绍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()用于销毁窗口
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");
}
这一个部分到这里就结束了!