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 workCvCapture* 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基本函数学习相关推荐
- 超详细!使用OpenCV深度学习模块在图像分类下的应用实践
专注计算机视觉前沿资讯和技术干货 微信公众号:极市平台 官网:https://www.cvmart.net/ 极市导读:本文来自6月份出版的新书<OpenCV深度学习应用与性能优化实践>, ...
- opencv进阶学习笔记3:像素运算和图像亮度对比度调节
基础版传送门: python3+opencv学习笔记汇总目录(适合基础入门学习) 进阶版目录: python+opencv进阶版学习笔记目录(适合有一定基础) 像素运算 要求两张图大小,以及格式(np ...
- OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize()
OpenCV示例学习(七):离散傅里变换(DFT)算子:getOptimalDFTSize(),copyMakeBorder(),magnitude(),log(),normalize() #incl ...
- OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse()
OpenCV示例学习(二): 基本图形绘制算子:line(),circle(),fillPoly(), ellipse() #include <opencv2/opencv.hpp>usi ...
- opencv opencl加速_回放 | OpenCV Webinar 3:OpenCV深度学习应用与原理分析
OpenCV DNN模块提供了深度学习的推理,支持Caffe.Tensoflow.Torch.Darknet.ONNX等格式的模型,无需用户安装对应的深度学习框架,也无需进行模型格式转换,直接调用DN ...
- opencv 计数后不动了 训练模型时_用OpenCV,深度学习和Python进行年龄识别
(给Python编程开发加星标,提升编程技能.) 在本教程中,您将学习如何使用OpenCV,深度学习和Python执行年龄的自动识别/预测. 学完本教程后,您将能够以相当高的精确度去自动预测静态图像文 ...
- 基于python的opencv的学习
前言 在了解基本的python语法后,我们终于可以开始进行一些项目的实践学习.这里 用opencv进行第一个python项目的上手. 这里我将会分享自己寒假对于opencv的学习 一.安装开发环境 推 ...
- 【计算机视觉】opencv入门学习笔记Part.1
[计算机视觉]opencv入门学习笔记Part.1 1 前言 1.1 opencv概述(摘取自百度百科) 1.2 图像概念引入 1.3 安装opencv库 2 图像基本操作 2.1 图像的读取 2.2 ...
- [opencv][cpp] 学习手册3:多边形拟合
[opencv][cpp] 学习手册3:多边形拟合 文章目录 [opencv][cpp] 学习手册3:多边形拟合 1. 多边形拟合示例:approxPolyDP 2. 心得 &&_参考 ...
最新文章
- vmware 共享文件夹(win10下的vmware安装了centos7)
- “4K云字库”基本框架图
- 网络爬虫:基于对象持久化实现爬虫现场快速还原
- random输出1到10之间_第43P,随机数,Python内置库之random
- mysql 按照in id顺序_Mysql查询结果顺序按in()中ID的顺序排列的案例区分
- Java黑皮书课后题第8章:*8.32(几何:三角形面积)编写一个方法,使用下面的方法头,返回一个三角形的面积。编写一个程序,提示用户输入三角形的三个点,然后显示三角形的面积
- 利用TF-IDF提取新闻文章摘要
- springboot Java实现多文件的zip压缩操作 + 通过浏览器下载文件的两种方式
- LeetCode 567. 字符串的排列 (滑动窗口哈希表)
- window 右击菜单启动 nodejs app
- AS技巧合集「调试技巧篇」
- BZOJ2769 : YY的快速排序
- 如何判断单链表里面是否有环【转载】
- 2008年上半年程序员考试上午真题自我汇总
- 简易看房加权评估案例C++
- 大数据技术及大数据架构
- PPT(母版的使用))
- Inflated 3D ConvNet 【I3D】
- MySQL原理与学习
- vue实现表格列位置的拖拽
热门文章
- Oracle导出DMP文件的两种方法
- 【数字图像处理之(一)】数字图像处理与相关领域概述
- php 提取数字,php如何实现只取数字的功能
- 高德API 经纬度转换地市区县(含读取文件)
- because it violates the following Content Security Policy directive: “default-src ‘none‘“
- flink 缓存问题处理过程,看我十八般武艺
- 【QT Graphics/View】简易图元编辑器
- 图像处理中的 亮度, 灰度, 对比度等概念
- 海淘 亚马逊 冻结账号 怎么办?
- spyder安装+使用中的问题