`

OpenCV基本函数学习

 
阅读更多

OpenCV开发包提供了许多功能,诸如读取各种类型的图像文件、视频内容以及摄像机输入的功能,这些功能是OpenCV开发包所包含的HighGUI工具集的一部分,为使用这些功能,首先要了解一些简单的程序所使用的函数及其功能。

 

1.显示图像

以最简单的显示图像程序为例,可以认识几个基础的函数及其作用。
cvNamedWindow()是一个高层调用接口,用于在屏幕上创建一个窗口,函数中的第一个参数指定了该窗口的窗口标题,若需要使用其他函数与该窗口进行交互时,即使用该参数值引用这个窗口。函数中的第二个参数定义了窗口的属性,该参数可以被设置为0(默认值)或CV_WINDOW_AUTOSIZE。设置为0时,窗口的大小不会因加载的图像或视频的大小而改变,图像与视频只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为CV_WINDOW_AUTOSIZE时,窗口会根据图像视频的实际大小自动进行拉伸或缩放以进行容纳。。
cvLoadImage()函数也是一个高层调用接口,它通过文件名确定被加载文件的格式,并且该函数将自动分配图像数据结构所需的内存。
cvShowImage()函数可以用来显示图像,其第一个参数被设置来确定在哪个已经存在的窗口中显示图像,前提是有一个与某个图像文件相对应的IplImage*类型的指针。
cvWaitKey()函数的功能是使程序暂停,等待用户触发一个按键操作。如果将该函数参数设为一个正数,则程序将暂停一段时间,时间长度为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何按键。当设置该函数参数为0或者负数时,程序将一直等待用户触发按键操作。
cvReleaseImage()函数在用完加载到内存的文件后可以用来释放为文件分配的内存,在对cvReleaseImage()函数的调用执行完毕后,img指针将被设置为空。
cvDestoryWindow()函数用来关闭窗口,同时释放为该窗口所分配的所有内存。

#include"highgui.h"

int main( int argc, char**argv )
{
  IplImage* img = cvLoadImage( argv[1] );
  cvNamedWindow("Example1",CV_WINDOW_AUTOSIZE );
  cvShowImage("Example1", img );
  cvWaitKey(0);
  cvReleaseImage( &img );
  cvDestroyWindow("Example1");
}

 

2.播放AVI视频

通过播放AVI视频的程序,来学习以下两个函数的功能。
cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针,其中包含状态信息。在调用这个函数之后,返回指针所指向的CvCapture结构被初始化到所对应AVI文件的开头。
cvQueryFrame()函数的参数为CvCapture结构的指针,用来将下一帧视频文件载入内存(实际是填充或更新CvCapture结构中),返回一个对应当前帧的指针。与cvLoadImage()不同的是,cvLoadImage为图像分配内存空间,而cvQueryFrame使用已经在cvCapture结构中分配好的内存。这样,就不需要cvReleaseImage()对这个返回的图像指针进行释放,当CvCapture结构被释放后,每一帧图像所对应的内存空间即会被释放。

#include"highgui.h"

int main( int argc, char**argv ) { 
    cvNamedWindow( "Example2", CV_WINDOW_AUTOSIZE);
    //CvCapture* capture = cvCaptureFromAVI(argv[1] ); // either one will work
    CvCapture* capture = cvCreateFileCapture(argv[1] );
    IplImage* frame;
    while(1) {
        frame = cvQueryFrame( capture );
        if( !frame ) break;
        cvShowImage( "Example2",frame );
        char c = cvWaitKey(33);
        if( c == 27 ) break;
    }
    cvReleaseCapture( &capture );
    cvDestroyWindow( "Example2" );
}

 

 

3.从摄像机读入数据

为了实现系统,第一步就是要从摄像头读入数据。OpenCV中的HighGUI模块为我们提供了一种简单的方式来处理这种情况,类似于读取AVI文件,循环的顺序的读出视频中的每一帧,不同的是,我们调用的是cvCreateCameraCapture()来代替cvCreateFileCapture(),后面一个函数参数为摄像设备的ID而不是AVI文件的名称,在存在多个摄像设备时这个参数才起作用,其默认值为-1,代表“随机选择一个”,更适合当有且仅有一个摄像设备的情况。cvCreateCameraCapture()同样返回相同的CvCapture*指针,这使得我们可以使用完全类似于从视频流中获取帧的方法。

#include"stdafx.h"
#include<opencv2/opencv.hpp>

int main(int argc, char*argv[])
{
cvNamedWindow("Example2",CV_WINDOW_AUTOSIZE);
CvCapture *capture=cvCreateCameraCapture(0);
IplImage *frame;
while(1){
       frame=cvQueryFrame(capture);
       if(!frame) break;
       cvShowImage("Example2",frame);
       char c=cvWaitKey(33);
       if(c==27) break;
}
cvReleaseCapture(&capture);
cvDestroyWindow("Example2");
       return 0;
}

 

4.几个基本函数

cvCopy()用于将一个图像复制到另一个图像,这个函数要求两个数组具有相同的数据类型、相同的大小和相同的维数,可以用来复制稀疏矩阵,但这样做时,不支持mask,对于非稀疏矩阵和图像,mask如果为空,则只对与mask中与非0值相对应的dst中的像素赋值。
cvCvtColor()当数据类型一致时,它将图像从一个颜色空间(通道的数值)转换到另一个,具体的转换操作由参数code来指定,如CV_RGB2GRAY就是转换RGB或BGR色彩空间为灰度空间。
cvGetSize()是专门为矩阵和图像设计的,这两种对象的维数总是2.其尺寸可以一CvSize结构的形式返回,例如当创建一个新的大小相同的矩阵或图像时,使用此函数就很方便。
cvSet()和cvSetZero()能将数组的所有通道的所有值设置为指定的参数value。该cvSet()函数接受一个可选的参数:如果提供参数,那么只有那些与参数mask中非0值对应的像素将被设置为指定的值。函数cvSetZero()仅仅是cvSet(0.0)别名。
cvLine()是绘图函数中最简单的。属性分别为图像、线段的第一个端点、线段的第二个端点、线段的颜色、线段的粗细程度、线段的类型。
cvPutText()是OpenCV中一个主要的函数,可以在图像上输出一些文字。参数img表示图像,text所指向的文字将打印到图像上。origin指定文本框左下角的坐标,font表示字体结构体,color表示文本的字体颜色。
为了降低输出文字工作的复杂度,我们需要使用CvFont指针。简单来说,获取CvFont*指针的方式就是调用cvInitFont()。该函数采用一组参数配置一些用于屏幕输出的基本个特定字体。为了建立一个可以传值给cvPutText()的CvFont,首先必须声明一个CvFont变量,然后把它传递给cvInitFont()。调用cvInitFont()时,初始化一个已经准备好的CvFont结构(这意味着你创建了一个变量,并传给cvInitFont()函数一个指向新建的变量指针),而不是像cvCreateImage()那样创建一个结构并返回指针。

分享到:
评论

相关推荐

    OPENCV函数学习手册.pdf

    OPENCV函数学习手册.pdf ,方便童鞋们了解opencv库函数的使用方法。 包含很全面的函数用法介绍:图像基本处理函数、结构分析、运动分析和对象跟踪、模式识别、照相机标定和三维重建等。

    学习OPENCV(中文版)

    学习opencv(中文版) 清华大学出版社 出版前言 译者序 写在前面的话 前言 第1章 概述 什么是OpenCV OpenCV的应用领域 什么是计算机视觉 OpenCV的起源 下载和安装OpenCV 通过SVN获取最新的OpenCV代码 更多OpenCV文档 ...

    opencv+4.1中文官方文档v1.1版.pdf

    在本节中,您将学习OpenCV内部的不同图像处理函数。 • 特征检测与描述 在本节中,您将学习有关特征检测和描述符的信息 • 视频分析 在本部分中,您将学习与对象跟踪等视频配合使用的不同技术。 • 相机校准和3D重建...

    openCV-Library.rar_opencv

    openCV Library是学习opencv新手必备资料,包含各种opencv函数的解释和用法,以及opencv的基本例程

    学习opencv中文版

    学习opencv文档中文版,目录结构如下: OpenCV入门必备 图书目录: 第1章 概述 什么是OpenCV OpenCV的应用领域 什么是计算机视觉 OpenCV的起源 下载和安装OpenCV 通过SVN获取最新的OpenCV代码 更多OpenCV文档 OpenCV...

    学习opencv中文版本

    OpenCV OpenCV OpenCVOpenCV是一个广受欢迎的开源计算机视觉库 是一个广受欢迎的开源计算机视觉库 ,它提供了 很多函数,实现很多计算机视觉法,从最基本的 滤波到高级物体检测 皆有涵盖 。很多 初学者希望快速掌握 ...

    OpenCV-Samples.rar_cv.samples函数_opencv_opencv 210_opencv samples

    Opencv示例程序,包括Opencv头文件和210版库函数,方便Opencv初学者快速学习Opencv图像处理的基本功能

    opencv入门教程.zip

    OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了 很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。很多 初学者希望快速掌握 OpenCV 的使用方法,但往往会遇到各种各样的困难...

    基于OPENCV的超声图像增强

    基于OPENCV的超声图像增强 项目中用了基本的OPENCV 函数 实现了 超声图像的增强 OPENCV 是 计算机视觉领域一个 不错的 开发工具 项目中用提出了一个新的方法来处理数字图像 同时也对比了直方图均衡化 和数学形态学...

    OpenCV入门教程pdf文字版

    OpenCV OpenCV OpenCVOpenCV是一个广受欢迎的开源计算机视觉库 是一个广受欢迎的开源计算机视觉库 ,它提供了 很多函数,实现很多计算机视觉法,从最基本的 滤波到高级物体检测 皆有涵盖 。很多 初学者希望快速掌握 ...

    opencv学习资料

    3 三、OpenCV的基本数据结构 3.1 1、图像数据结构 3.1.1 (1) IPL 图像: 3.2 2、矩阵与向量 3.2.1 (1) 矩阵: 3.2.2 (2) 一般矩阵: 3.2.3 (3) 标量: 3.3 3、其它结构类型 3.3.1 (1) 点: 3.3.2 (2) ...

    opencv 中文参考手册

    OpenCV中文参考手册2010年新版 pdf版下载,涉及OpenCV 编程简介(矩阵/图像/视频的基本读写操作)入门必读  OpenCV概述  FAQ中文  CxCore中文参考手册  1. 基础结构  2. 数组操作  3. 动态结构  4. ...

    OpenCV实现图像校正功能

    1、利用 OpenCV 里面的仿射变换函 数实现对图像进行一些基本的变换,如平移、旋转、缩放 2、学习透视变换原理,对一个矩形进行透视变换,并将变换结果绘制出来。先调用 OpenCV 函数实现透视变换,自己编写代码实现...

    OpenCV入门教程

    OpenCV是一个广受欢迎的开源计算机视觉库 是一个广受欢迎的开源计算机视觉库 ,它提供了 很多函数,实现很多计算机视觉法,从最基本的 滤波到高级物体检测 皆有涵盖 。很多 初学者希望快速掌握 OpenCV OpenCV ...

    基于自实现opencv图像处理函数的静态车道线检测项目源码.zip

    - [**基于自实现opencv图像处理函数的静态车道线检测项目**](#基于自实现opencv图像处理函数的静态车道线检测项目) - [**1.项目背景**](#1项目背景) - [**2.实现**](#2实现) - [**2.1 基本思路: 去噪,边缘提取...

    Learn-OpenCV-in-3-hour_内附代码和教学视频

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。OpenCV 使用 C/C++ 开发,同时也...

    基于OpenCV深度学习神经网络人脸模块(OpenCV DNN Face)的实时人脸识别程序.zip

    Core:包含基本的数据结构(如cv::Mat用于图像存储和操作)、基本的图像和矩阵操作、数学函数、文件I/O等底层功能。 ImgProc:提供图像预处理、滤波、几何变换、形态学操作、直方图计算、轮廓发现与分析等图像...

    OpenCV中文参考手册2010年

    OpenCV 编程简介(矩阵/图像/视频的基本 读写操作)入门必读 OpenCV概述 FAQ中文 CxCore中文参考手册 1. 基础结构 2. 数组操作 3. 动态结构 4. 绘图函数 5. 数据保存和运行时类型信息 6. 其它混合函数 7. 错误处理和...

    OPENCV学习笔记一:图像基本操作

    标题学习opencv第一天: 一、图像基本操作: 1.图像读取:cv.imread(“文件位置:D:/python/picture.png” ) 函数功能:从文件路径中读取图片文件并显示出来,可读取的文件类型有JPG、JPEG、PNG、Webp等 函数原型:...

    21ic下载_OPENCV的入门的PPT学习课件.rar

    OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉库,它提供了很多函数,这些函数非常高效地实现了计算机视觉算法(最基本的滤波到高级的物体检测皆有涵盖)。 OpenCV 使用 C/C++ 开发,...

Global site tag (gtag.js) - Google Analytics