Opencv的基本操作
opencv基本使用方法

OpenCV基本使用方法一、介绍O p en CV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法,可以用于图像处理、目标检测、人脸识别等各种应用。
本文档将介绍O pe nC V的基本使用方法,包括图像读取、显示、保存以及常用的图像处理操作。
二、图像读取与显示1.读取图像要读取图像,可以使用`cv2.im re ad()`函数。
该函数接受图像文件的路径作为参数,并返回一个表示图像的多维数组。
i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")2.显示图像要显示图像,可以使用`cv2.im sh ow()`函数。
该函数接受一个窗口名称和一个表示图像的多维数组作为参数。
i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")c v2.im sh ow("Im age",i ma ge)c v2.wa it Ke y(0)c v2.de st ro yA ll Wind ow s()三、图像保存与格式转换1.保存图像要保存图像,可以使用`cv2.im wr it e()`函数。
该函数接受图像保存的路径和表示图像的多维数组作为参数。
i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")c v2.im wr it e("n ew_i ma ge.j pg",im age)2.格式转换要将图像从一种格式转换为另一种格式,可以使用`c v2.c vt Co lo r()`函数。
该函数接受表示图像的多维数组和转换的标志作为参数。
i m po rt cv2i m ag e=cv2.im re ad("im ag e.jp g")g r ay_i ma ge=c v2.cv t Co lo r(im ag e,cv2.CO LO R_BG R2GR AY)四、常用的图像处理操作1.转换为灰度图要将彩色图像转换为灰度图,可以使用`c v2.cv tC ol or()`函数,并指定转换标志为`cv2.CO LO R_BG R2GR AY`。
open cv常见操作

open cv常见操作OpenCV是一个广泛应用于计算机视觉领域的开源图像处理库,提供了丰富的图像处理和计算机视觉算法。
本文将介绍一些常见的OpenCV操作,包括图像读取、显示、保存、调整大小、灰度化、边缘检测、图像平滑和图像旋转等。
一、图像读取和显示使用OpenCV读取图像非常简单,只需要调用cv2.imread()函数并指定图像的路径即可。
读取后的图像数据可通过cv2.imshow()函数进行显示。
需要注意的是,OpenCV读取的图像数据是以BGR顺序存储的,如果需要显示正确的颜色,需要将其转换为RGB格式。
二、图像保存使用cv2.imwrite()函数可以将图像保存为指定的文件。
该函数的第一个参数是保存的路径及文件名,第二个参数是要保存的图像数据。
三、调整图像大小图像大小调整是图像处理中常见的操作之一,OpenCV提供了cv2.resize()函数实现图像的缩放。
该函数的第一个参数是要调整大小的图像,第二个参数是目标图像的大小,可以指定为具体的像素值或者按比例缩放。
四、图像灰度化灰度化是指将彩色图像转换为灰度图像的过程。
在OpenCV中,可以使用cv2.cvtColor()函数将彩色图像转换为灰度图像。
该函数的第一个参数是要转换的图像,第二个参数是转换的方式,可以指定为cv2.COLOR_BGR2GRAY。
五、边缘检测边缘检测是图像处理中常见的操作之一,可以用于检测物体的边界。
在OpenCV中,可以使用cv2.Canny()函数实现边缘检测。
该函数的第一个参数是要检测边缘的图像,第二个参数是设定的阈值,用于控制边缘的检测结果。
六、图像平滑图像平滑可以用于去除图像中的噪声,使图像变得更加清晰。
在OpenCV中,可以使用cv2.GaussianBlur()函数实现图像的高斯平滑。
该函数的第一个参数是要平滑的图像,第二个参数是高斯核的大小,用于控制平滑的程度。
七、图像旋转图像旋转可以改变图像的角度,常用于图像的矫正和特征提取。
c++的opencv使用方法总结

C++的OpenCV使用方法总结在计算机视觉和图像处理领域,OpenCV是一个非常强大的开源库,它提供了丰富的功能和工具,用于处理图像和视频。
作为C++程序员,了解并熟练使用OpenCV库是非常重要的。
本文将对C++中使用OpenCV的方法进行总结,并探讨一些常见的应用和技巧。
一、安装和配置OpenCV在开始使用OpenCV之前,首先需要安装和配置这个库。
在Windows评台上,可以通过下载预编译的二进制文件进行安装;在Linux评台上,可以通过包管理器进行安装。
安装完毕后,还需进行一些环境配置,确保编译器能够正确信息OpenCV库文件。
二、基本图像处理1. 读取和显示图像在C++中使用OpenCV读取和显示图像非常简单,只需几行代码即可完成。
首先需要使用imread函数读取图像文件,然后使用imshow 函数显示图像。
在进行图像显示后,需要使用waitKey函数等待用户按下某个键,以便关闭显示窗口。
2. 图像的基本操作OpenCV提供了丰富的图像处理函数,包括图像缩放、旋转、平移、通道拆分与合并等。
这些函数可以帮助我们对图像进行各种基本操作,从而满足不同的需求。
三、特征提取与描述1. Harris角点检测Harris角点检测是一种经典的特征点检测方法,它可以用来识别图像中的角点。
在OpenCV中,我们可以使用cornerHarris函数来实现Harris角点检测,然后对检测结果进行筛选和标记。
2. SIFT特征提取SIFT是一种广泛应用的特征提取算法,它具有旋转不变性和尺度不变性。
在OpenCV中,我们可以使用SIFT算法来提取图像的关键点和特征描述子,从而实现图像匹配和目标识别等功能。
四、图像分类与识别1. 使用支持向量机(SVM)进行图像分类OpenCV提供了对机器学习算法的支持,包括SVM分类器。
我们可以使用SVM对图像进行分类,从而实现图像识别和目标检测等功能。
2. 使用深度学习模型进行图像识别近年来,深度学习在图像识别领域取得了显著的成就。
opencv二值化轮廓提取

opencv二值化轮廓提取
在图像处理中,二值化是一种基本的图像分割方法,通常用于提取感
兴趣的目标轮廓。
通过将图像中的像素值限定在两个特定的值范围内,即0和255(或1和0),将图像分为背景和前景两部分。
opencv是一个广泛使用的开源计算机视觉库,提供了许多图像处理功能,包括二值化和轮廓提取。
在opencv中,可以使用以下步骤实现二值化轮廓提取:
1. 读取图像:使用opencv的函数读取图像,并将其转换为灰度图像(单通道图像)。
2. 图像二值化:通过使用opencv的函数,将灰度图像进行二值化处理。
可以选择适当的阈值方法,如自适应阈值或全局阈值等。
3. 轮廓提取:使用opencv的函数,对二值化图像进行轮廓提取操作。
可以选择适当的轮廓提取算法,如findContours()函数。
该函数将返
回图像中所有轮廓的坐标。
4. 绘制轮廓:使用opencv的绘图函数,将得到的轮廓坐标在原始图
像上进行绘制,以便可视化结果。
5. 显示结果:使用opencv的图像显示函数,将绘制了轮廓的图像显
示出来,以便查看或保存结果。
通过以上步骤,可以实现对图像的二值化轮廓提取。
通过调整二值化
的阈值和选择合适的轮廓提取算法,可以获得更好的轮廓提取效果。
这在许多计算机视觉应用中都是一个重要的步骤,如目标检测、物体跟踪等。
OpenCV入门教程

O p e n C V入门教程-CAL-FENGHAI.-(YICAI)-Company One1OpenCV 入门教程作者:于仕琪年 8 月版权所有于仕琪本作品采用知识共享署名-相同方式共享国际许可协议进行许可。
1前言OpenCV 是一个广受欢迎的开源计算机视觉库,它提供了很多函数,实现了很多计算机视觉算法,算法从最基本的滤波到高级的物体检测皆有涵盖。
很多初学者希望快速掌握OpenCV 的使用方法,但往往会遇到各种各样的困难。
其实仔细分析,造成这些困难的原因有两类:第一类是C/C++编程基础不过关;第二类是不了解算法原理。
解决这些困难无非提升编程能力,以及提升理论基础知识。
提升编程能力需要多练习编程,提升理论知识需要系统学习《数字图像处理》、《计算机视觉》和《模式识别》等课程,所有这些都不能一蹴而就,需要耐下心来认真修炼。
同时我们也需要认识到 OpenCV 只是一个算法库,能为我们搭建计算机视觉应用提供“砖头”。
我们并不需要完全精通了算法原理之后才去使用 OpenCV,只要了解了“砖头”的功能,就可以动手了。
在实践中学习才是最高效的学习方式。
本小册子希望为初学者提供引导,使初学者快速了解 OpenCV 的基本数据结构以及用法。
此外,如您发现有错误之处,欢迎来信指正。
于仕琪深圳大学插播广告:欢迎有能力、有激情以及对计算机视觉有兴趣的同学报考我的研究生。
欲了解详情可以访问深圳大学招生网或者给我发 email。
目录第 1 章预备知识 (5)编程的流程 (5)什么叫编辑 (6)什么叫编译 (6)什么叫连接 (7)什么叫运行 (7)Visual C++是什么 (8)头文件 (9)库文件 (10)OpenCV 是什么 (11)什么是命令行参数 (12)常见编译错误 (13)找不到头文件 (13)拼写错误 (14)常见链接错误 (15)运行时错误 (17)第 2 章OpenCV 介绍 (19)OpenCV 的来源 (19)OpenCV 的协议 (19)第 3 章图像的基本操作 (21)图像的表示 (21)Mat 类 (23)创建 Mat 对象 (24)构造函数方法 (24)create()函数创建对象 (25)Matlab 风格的创建对象方法 (26)矩阵的基本元素表达 (26)像素值的读写 (27)at()函数 (28)使用迭代器 (29)通过数据指针 (30)选取图像局部区域 (32)单行或单列选择 (32)用 Range 选择多行或多列 (33)感兴趣区域 (33)取对角线元素 (34)Mat 表达式 (34)Mat_类 (36)Mat 类的内存管理 (38)输出 (40)Mat 与 IplImage 和 CvMat 的转换 (42)Mat 转为 IplImage 和 CvMat 格式 (42)IplImage 和 CvMat 格式转为 Mat (42)第 4 章数据获取与存储 (44)读写图像文件 (44)读图像文件 (44)写图像文件 (45)读写视频 (47)读视频 (47)写视频 (49)第1章预备知识OpenCV 是一个功能强大的计算机视觉库,要用好它,除了要具有相关的计算机视觉理论知识外,还需要具有一定的编程能力。
个人整理的opencv最基本入门资料

---- By Moco Sun 2010.12.19
1. 简介 OpenCV 的全称是:Open Source Computer Vision Library,Intel 公司支持的开源计算机视
觉库,采用 c/c++编写,可以运行在 linux/windows/mac 等操作系统上。Opencv 还提供了 python、ruby、matlab 以及其他语言的接口。
//读取图像宽度 //读取图像高度 //读取图像通道数 //读取图像一行像素所占的字节数
{ pchar = (uchar*)image->imageData + i*widthStep; for (j=0; j<width; j++) { uchar* temp = pchar + j*channel; temp[0] += 10;//通道B temp[1] += 10;//通道G temp[2] += 10;//通道R }
其目标是构建一个简单易用的计算机视觉框架,以帮助开发人员更便捷地设计更复杂的 计算机视觉相关应用程序。Opencv 包含的函数有 500 多个,覆盖了如工厂产品检测、医学 成像、信息安全、用户界面、摄像机标定、立体视觉和机器人等,具体将在下面介绍。 Opencv 使用宽松的 BSD 开源协议,在遵守协议的情况下,允许生成商业产品,不必开发源 代码。
CvSize表示图像的大小,为含两个int的结构体,定义如下
typedef struct CvSize { int width; int height; }
CvSize; 小贴士
Cv与cv的区别:以Cv开头的一般是函数,以cv开头的通常是内联数据元素。 CvPoint结构体不支持默认构造函数,但是可以通过inline的cvPoint(注意首字母小写)函数来创 建一个无名的CvPoint,这在传递一些函数参数经常使用,同理,CvScalar与cvScalar,CvSize与 cvSize等也有这样的用法。
【opencv+python】图像的基本操作:缩放、剪切、位移、旋转、仿射变换

【opencv+python】图像的基本操作:缩放、剪切、位移、旋转、仿射变换1.缩放代码:# 使⽤resize函数实现图⽚缩放import cv2src = cv2.imread("C:/360Downloads/1.jpg", 1)cv2.imshow("src", src)srcInfo = src.shapeheight = srcInfo[0]width = srcInfo[1]dstHeight = int(height * 0.5)dstWidth = int(width * 0.5)dst = cv2.resize(src, (dstWidth, dstHeight))cv2.imshow("dst", dst)cv2.waitKey(0)# 使⽤warpAffine函数实现图⽚缩放import cv2import numpy as npsrc = cv2.imread("C:/360Downloads/1.jpg", 1)cv2.imshow("src", src)srcInfo = src.shapeheight = int(srcInfo[0]/2)width = int(srcInfo[1]/2)# 将图⽚缩⼩为原来的⼀半:# xNew = x * 0.5# yNew = y * 0.5# xNew = x * A1 + y * A2 + B1# yNew = x * A3 + y * A4 + B2# np.float32([[A1, A3, B1],# [A2, A4, B2]])matScale = np.float32([[0.5, 0, 0],[0, 0.5, 0]])dst = cv2.warpAffine(src, matScale, (width, height))cv2.imshow("dst", dst)cv2.waitKey(0)效果:2.剪切代码:# 图⽚剪切import cv2src = cv2.imread("C:/360Downloads/1.jpg", 1) cv2.imshow("src", src)# [⾏,列]dst = src[100:200, 100:300]cv2.imshow("dst", dst)cv2.waitKey(0)效果:3.位移代码:# 图像位移import cv2import numpy as npsrc = cv2.imread("C:/360Downloads/1.jpg", 1)cv2.imshow("src", src)srcInfo = src.shapeheight = srcInfo[0]width = srcInfo[1]# 左移100,下移200:# xNew = x + 100# yNew = y + 200# xNew = x * A1 + y * A2 + B1# yNew = x * A3 + y * A4 + B2# np.float32([[A1, A3, B1],# [A2, A4, B2]])matShift = np.float32([[1, 0, 100], [0, 1, 200]])dst = cv2.warpAffine(src, matShift, (width, height)) cv2.imshow("dst", dst)cv2.waitKey(0)效果:4.旋转代码:# 旋转图像import cv2src = cv2.imread("C:/360Downloads/1.jpg", 1)cv2.imshow("src", src)srcInfo = src.shapeheight = srcInfo[0]width = srcInfo[1]# getRotationMatrix2D 函数可获取旋转的仿射矩阵# 参数依次为(旋转中⼼,旋转⾓度,缩放⽐例)matRotate = cv2.getRotationMatrix2D((0, 0), 45, 0.5) dst = cv2.warpAffine(src, matRotate, (width, height))cv2.imshow("dst", dst)cv2.waitKey(0)效果:5.仿射变换代码:# 仿射变换import cv2import numpy as npsrc = cv2.imread("C:/360Downloads/1.jpg", 1)cv2.imshow("src", src)srcInfo = src.shapeheight = srcInfo[0]width = srcInfo[1]# 三点确定⼀个平⾯# getAffineTransform 函数可获取仿射矩阵# 参数依次为(源图像的三点坐标,⽬标图像的三点坐标)# 三点分别为(左上⾓,左下⾓,右上⾓)matSrc = np.float32([[0, 0], [0, height - 1], [width - 1, 0]])matDst = np.float32([[50, 50], [150, height - 100], [width - 100, 150]]) matAffine = cv2.getAffineTransform(matSrc, matDst)dst = cv2.warpAffine(src, matAffine, (width, height))cv2.imshow("dst", dst)cv2.waitKey(0)效果:。
python中opencv的用法

python中opencv的用法
OpenCV 是一个开源的计算机视觉库,广泛应用于图像处理、视频分析、人脸识别等领域。
在 Python 中使用 OpenCV,可以通过以下步骤进行:
1. 安装 OpenCV:首先需要在系统中安装 OpenCV。
可以使用 pip 命令进行安装,例如:
```
pip install opencv-python
```
2. 导入 OpenCV 模块:在 Python 代码中,可以使用以下语句导入 OpenCV 模块:
```python
import cv2
```
3. 加载图像:OpenCV 提供了多种加载图像的方法,其中最常用的是使用 cv2.imread()函数。
该函数接受一个字符串参数,表示图像的路径,并返回一个代表图像的矩阵。
```python
image = cv2.imread('image.jpg')
```
4. 操作图像:OpenCV 提供了丰富的图像操作函数,例如:
- 改变图像大小:使用 cv2.resize()函数。
- 翻转图像:使用 cv2.flip()函数。
- 旋转图像:使用 cv2.rotate()函数。
- 提取图像特征:使用 cv2.Canny()函数。
5. 保存图像:使用 cv2.imwrite()函数可以将图像保存到文件中。
以上是 OpenCV 在 Python 中的基本用法,你可以根据实际需求进一步学习和使用OpenCV 中的其他函数。
opencv4应用开发-入门,进阶与工程化实践

opencv4应用开发-入门,进阶与工程化实践引言随着计算机视觉技术的飞速发展,OpenCV已成为计算机视觉领域的核心库。
OpenCV4在图像处理、目标检测、机器学习等领域的应用日益广泛。
本文将带领大家从入门到进阶,再到工程化实践,深入探索OpenCV4的魅力。
第一部分:入门篇1.1 OpenCV4简介首先,我们来了解一下OpenCV4。
OpenCV是一个开源的计算机视觉库,包含了大量的图像处理和计算机视觉的算法。
OpenCV4在保持原有功能的基础上,进一步优化了算法性能,并增加了许多新的功能模块。
1.2 环境配置在开始OpenCV的学习之前,我们需要配置好开发环境。
这包括安装OpenCV 库、选择合适的编程语言(如Python、C++等)以及相应的开发工具(如PyCharm、Visual Studio等)。
1.3 基本操作在掌握了环境配置后,我们可以开始学习OpenCV的基本操作,如图像的读取、显示、保存等。
通过这些基础操作,我们可以对图像进行简单的处理,如灰度转换、噪声去除等。
第二部分:进阶篇2.1 图像处理算法在掌握了基本操作后,我们可以进一步学习OpenCV提供的各种图像处理算法,如滤波、边缘检测、形态学处理等。
这些算法可以帮助我们更好地理解和处理图像。
2.2 目标检测与跟踪目标检测和跟踪是计算机视觉的重要应用之一。
OpenCV提供了多种目标检测和跟踪的方法,如Haar级联、HOG+SVM、深度学习模型等。
通过这些方法,我们可以实现人脸检测、行人检测等功能。
2.3 机器学习与计算机视觉近年来,机器学习在计算机视觉领域的应用越来越广泛。
OpenCV4结合了多种机器学习算法,如支持向量机、随机森林等,使得我们可以在计算机视觉任务中更好地利用机器学习的能力。
第三部分:工程化实践篇3.1 项目管理与团队协作在大型项目中,良好的项目管理至关重要。
我们需要根据项目的需求,制定合适的开发计划,并进行有效的团队协作。
OpenCV常用操作之计时、缩放、旋转、镜像

常用操作在OpenCV开发过程中用于测试性能计时的:计时(计算处理的时间)。
在一般的图像处理中有的几个操作:缩放(放大、缩小),旋转(90度的倍数)、镜像(x轴反向、y轴反向)。
注意:意角度的旋转使用cv::Mat不太合适,开发过程中会用到其他ui框架,所以使用其他ui框架做旋转是比较合适的。
计时函数OpenCV提供了两个渐变的计时函数:getTickCount()和getTickFrequency()。
getTickCount():getTickCount()函数返回CPU自某个事件(如启动电脑)以来走过的时钟周期数。
getTickFrequency():getTickFrequency()函数返回CPU一秒钟所走的时钟周期数。
测试结果如下:cv::getTickFrequency()获取的频率为10,000,000,得到cpu的周期为一千万次每秒。
访问图像中像素的三类方法cv::Mat访问的三类方法:方法一:at函数方法二:使用迭代器方法三:通过数据指针旋转(90度的整数倍)旋转90°的整数就是对矩阵位置进行变换,如下图:旋转函数1:cv::transpose()该函数无任何函数,直接对矩阵进行顺时钟旋转90°,函数原型如下:CV_EXPORTS_W void transpose(InputArray src, OutputArray dst);旋转函数2:cv::rotate()该函数旋转函数,三个枚举可以旋转90°,180°,270°,逆时针旋转90°就是顺时钟270°,函数原型如下:CV_EXPORTS_W void rotate(InputArray src, OutputArray dst, int rotateCode);参数一:输入mat参数二:输出mat参数三:旋转枚举,如下:enum RotateFlags {ROTATE_90_CLOCKWISE = 0, //Rotate 90 degrees clockwiseROTATE_180 = 1, //Rotate 180 degrees clockwiseROTATE_90_COUNTERCLOCKWISE = 2, //Rotate 270 degrees clockwise};代码示例:cv::rotate(srcMat, srcMat, cv::ROTATE_90_CLOCKWISE);镜像(x轴翻转,y轴翻转)镜像就是对X轴和Y轴的值翻转对调,如下图:翻转函数:cv::flip该函数为翻转函数,函数圆形如下:CV_EXPORTS_W void flip(InputArray src, OutputArray dst, int flipCode);参数一:输入mat参数二:输出mat参数三:只有3种值,小于0,等于0,大于0,分别对应xy轴翻转、x轴翻转、y轴翻转。
opencvPPT

1.AdaptiveThreshold自适应阈值方法 void cvAdaptiveThreshold( const CvArr* src, CvArr* dst, double max_value, int adaptive_method=CV_ADAPTIVE_THRESH_MEAN_C, int threshold_type=CV_THRESH_BINARY, int block_size=3, double param1=5 ); 函数 cvAdaptiveThreshold 将灰度图像变换到二值图像 2.Threshold对数组元素进行固定阈值操作 void cvThreshold( const CvArr* src, CvArr* dst, double threshold, double max_value, int threshold_type ); 函数 cvThreshold 对单通道数组应用固定阈值操作。该函数的典型应用是对灰度图像进行阈 值操作得到二值图像。 或者是去掉噪声,例如过滤很小或很大象素值的图像点。 3.CvtColor色彩空间转换 void cvCvtColor( const CvArr* src, CvArr* dst, int code ); 函数 cvCvtColor 将输入图像从一个色彩空间转换为另外一个色彩空间。 4.Integral计算积分图像 void cvIntegral( const CvArr* image, CvArr* sum, CvArr* sqsum=NULL, CvArr* tilted_sum=NULL ); 利用积分图像,可以计算在某象素的上-右方的或者旋转的矩形区域中进行求和、求均值以 及标准方差的计算,并且保证运算的复杂度为O(1)。 可以在变化的窗口内做快速平滑或窗口相关等操作。 5.Filter2D对图像做卷积 void cvFilter2D( const CvArr* src, CvArr* dst,const CvMat* kernel, CvPoint anchor=cvPoint(-1,-1)); 6.Smooth各种方法的图像平滑 void cvSmooth( const CvArr* src, CvArr* dst,int smoothtype=CV_GAUSSIAN, int param1=3, int param2=0, double param3=0, double param4=0 );
OpenCV教程2(python)

OpenCV教程2(python)OpenCV教程2(python)上节我们简单的介绍了⼀下OpenCV操作图⽚,这节我们讲⼀下视频的有关操作。
视频和图⽚从某种程度上来讲其实是同⼀种东西,基本上所有的视频都是由⼀帧⼀帧图⽚组成的,操作视频其实就是对每⼀帧的图⽚进⾏操作。
OpenCV基础操作-视频1.获取视频和播放视频还是先上代码,再去解释代码,这样便于学习。
import numpy as npimport cv2#读取摄像头,若想读取视频,参数0换成视频的路径+⽂件名cap = cv2.VideoCapture(0)while(True):ret, frame = cap.read()cv2.imshow('frame',frame)if cv2.waitKey(1)== ord('q'):breakcap.release()cv2.destroyAllWindows()对照前⾯操作图像的代码,是不是发现很像。
cv2.VideoCapture()创建了⼀个VideoCapture对象,⽤来捕获视频。
它的参数可以是设备的索引号,或是⼀个视频⽂件。
设备的索引号是指定要⽤的摄像头,⼀般内置的摄像头的索引号为0,可以换成1或其他的数字调⽤其他的摄像头。
因为视频是⼀帧⼀帧获取的,所以接下来是个⼀个while True循环,循环读取每⼀帧。
ret, frame = cap.read()读取每⼀帧,其中ret表⽰⼀个True/False的布尔值,⽤来表⽰是否读取成功。
frame表⽰读取到的np.array类型的每⼀帧,就是图⽚。
cv2.imshow('frame',frame)将每⼀帧显⽰在⼀个叫frame的窗⼝上。
这⾥解释⼀下,为什么这样显⽰在窗⼝上会产⽣视频的效果。
前⾯操作图⽚的时候,我们提到过,显⽰多幅图像的时候,若cv2.imshow()指定相同的窗⼝名,这样后⾯显⽰的图⽚会覆盖前⾯的图⽚,⽽产⽣⼀个窗⼝。
openCV读取XML文件基本操作

openCV读取XML⽂件基本操作openCV读取XML⽂件基本操作与保存XML⽂件操作类似,也有cvReadInt之类的函数,和保存struct相对应,读取的时候可以先选择节点(保存时的struct名称),再选择数据;如果保存数据时是没有名称,譬如CV_NODE_SEQ模式,直接选择cvReadInt(),如果有名称,譬如CV_NODE_MAP模式,选择cvReadIntByName()进⾏读取。
<?xml version="1.0"?><opencv_storage><int>100</int><bool_true>1</bool_true><bool_false>0</bool_false><float>9.9870002746582031e+001</float><string>"this is a string"</string><slParams><slParams_projWidth>1140</slParams_projWidth><slParams_projHeight>912</slParams_projHeight><slParams_camWidth>1024</slParams_camWidth><slParams_camHeight>1280</slParams_camHeight><slParams_colEncode>1</slParams_colEncode><slParams_rowEncode>0</slParams_rowEncode></slParams><point>2 3</point></opencv_storage>例如要读取以上的xml⽂件中的数据,使⽤cvReadInt()系类的函数,其中第⼀个参数是打开⽂件的名称,第⼆个是所要读取的数据的节点名称,对于直接存放在xml下的数据,节点为NULL,保存在xml时存放在sruct中的数据,节点就是struct的名称,如果是CV_NODE_MAP模式或者XML下的数据,⽤cvReadIntByName(),存储节点的类型为CvFileNode,取节点名称的函数为cvGetFileNodeByName()。
OpenCV总结

会出错
三、基本操作与常用函数说明
矩阵操作
指派外部数据给矩阵头
void cvSetData( CvArr* arr, void* data, int step ); 对已分配数据区矩阵使用该函数会发生内存泄露
释放矩阵
cvReleaseData(CvMat** mat); cvReleaseMatHeader(CvMat** mat ); VS void cvReleaseMat( CvMat** mat );
二、OpenCV基本数据类型和数据结构
1 2
CvMat:多通道矩阵
IplImage:IPL图像的头结构
3 4
5
CvArr:不确定数组
CvvImage:OpenCV的图像类
其他结构
二、OpenCV基本数据类型和数据结构 CvArr:不确定数组
只用作函数的参数
表示可接受多种类型的输入形式 (矩阵等)
int depth; 图像通用数据类型: IPL_DEPTH_<bit_depth>(S|U|F) S、U、F的意义同矩阵数据类型。
例:IPL_DEPTH_8U:8位无符号整数图像 IPL_DEPTH_32F:32位浮点数图像
二、OpenCV基本数据类型和数据结构 IplImage:IPL图像的头结构
cvaux.lib 辅助的OpenCV函数
立体匹配 3D跟踪 PCA方法 HMM模型
一、OpenCV基本介绍
VC6下OpenCV的环境设置 1. 将路径C:\Program Files\OpenCV\bin加 入到环境变量PATH中
一、OpenCV基本介绍
VC6下OpenCV的环境设置 2. 通过菜单Tools->Options->Directories 设置lib路径
如何使用OpenCV进行图像处理

如何使用OpenCV进行图像处理OpenCV是一个开源的计算机视觉库,提供了很多图像处理、计算机视觉和机器学习等方面的函数和工具,被广泛应用于各种计算机视觉领域的研究和应用中。
本文将介绍如何使用OpenCV进行图像处理,包括图像读写、基本操作、图像滤波和图像变换等内容。
一、图像读写在OpenCV中,可以使用imread()函数读取图像,使用imwrite()函数将图像保存到文件中。
其中,imread()函数有两个参数:第一个参数为读取的图像文件名,第二个参数为读取模式,常用的读取模式有三种:IMREAD_COLOR(默认模式,读取彩色图像)、IMREAD_GRAYSCALE(读取灰度图像)和IMREAD_UNCHANGED(读取原始图像,包括alpha值等信息)。
例如:```cv::Mat img_color = cv::imread("color_image.jpg",cv::IMREAD_COLOR); //读取彩色图像cv::Mat img_gray = cv::imread("gray_image.jpg",cv::IMREAD_GRAYSCALE); //读取灰度图像cv::Mat img_origin = cv::imread("original_image.png",cv::IMREAD_UNCHANGED); //读取原始图像```使用imwrite()函数将图像保存为文件,第一个参数为保存的文件名,第二个参数为要保存的图像。
例如:```cv::imwrite("result.jpg", img_color); //保存彩色图像cv::imwrite("result.png", img_gray); //保存灰度图像```二、基本操作OpenCV提供了各种基本的图像操作函数,包括图像大小调整、通道分离、通道合并、通道相加、通道相减、通道相乘等操作。
Python-OpenCV——基本操作详解

Python-OpenCV——基本操作详解OpenCV是⼀个基于BSD许可(开源)发⾏的跨平台计算机视觉库,可以运⾏在Linux、Windows、MacOS操作系统上。
它轻量级⽽且⾼效——由⼀系列 C 函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语⾔的接⼝,实现了图像处理和计算机视觉⽅⾯的很多通⽤算法。
简⾔之,通过openCV可实现计算机图像、视频编辑。
⼴泛应⽤于图像识别、运动跟踪、机器视觉等领域。
(OpenCV-Python就是⽤Python包装了C++的实现,背后实际就是C++的代码在跑,所以代码的运⾏速度跟原⽣C/C++速度⼀样快,⽽且更加容易编写。
)基础操作函数cv2.imread()——读取图像函数格式cv2.imread(img,flag)flag取值可以为cv2.IMREAD_COLOR 默认、彩⾊照⽚ 1cv2.IMREAD_GRAYSCALE 灰度照⽚ 0cv2.IMREAD_UNCHANGED 加载原图通道 -1也可以通过1、 0、-1 指定上述三个模式1import cv223# 灰度模式打开图⽚4 img = cv2.imread('messi5.jpg',0)cv2.imshow()——显⽰图⽚1 cv2.imshow('image',img) #第⼀个为显⽰的图⽚名字,第⼆个为图⽚2 cv2.waitKey(0) #不停刷新图⽚,直到你按下任意按键退出3 cv2.destroyAllWindows() #关闭所有显⽰框,若只关闭⼀个,可 cv2.destroyWindow()单独指定cv2.imwrite()——保存图⽚cv2.imwrite('messigray.png',img) #第⼀个参数为⽂件名,第⼆个为要保存的图像。
cv2.VideoCapture()——捕捉视频图像1import numpy as np2import cv234#创建⼀个VideoCapture项⽬,0代表选择第⼀个设备5 cap = cv2.VideoCapture(0)67while(True):8# 捕捉每⼀帧图像,返回两个参数ret为是否返回图⽚(True or False),frame为返回的图⽚9 ret, frame = cap.read()1011# 通过cv2.cvtColor转换颜⾊格式为灰度模式12 gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)1314# 播放每⼀帧图像15 cv2.imshow('frame',gray)16if cv2.waitKey(1) & 0xFF == ord('q'):17break1819# 最后要记得释放capture20 cap.release()21 cv2.destroyAllWindows()还可以通过更改设备号为⽂件名来播放视频(此处播放⽆声⾳),并且通过cv2.WaitKey()来控制播放速度,可以制作慢动作视频等等import numpy as npimport cv2cap = cv2.VideoCapture('vtest.avi')while(cap.isOpened()):ret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)cv2.imshow('frame',gray)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()cv2.VideoWriter()——保存视频import numpy as npimport cv2cap = cv2.VideoCapture(0)#fourcc是⼀种编码格式,我们保存视频时要指定⽂件名、编码格式、FPS、输出尺⼨、颜⾊模式fourcc = cv2.VideoWriter_fourcc(*'XVID')out = cv2.VideoWriter('output.avi',fourcc, 20.0, (640,480)) #输出⽂件名、FourCC、帧率、⼤⼩while(cap.isOpened()):ret, frame = cap.read()if ret==True:#cv2.flip(img,flag) 翻转图像(1⽔平翻转、0垂直翻转、-1⽔平垂直翻转)frame = cv2.flip(frame,0)# 写⼊视频帧out.write(frame)cv2.imshow('frame',frame)if cv2.waitKey(1) & 0xFF == ord('q'):breakelse:breakcap.release()out.release()cv2.destroyAllWindows()此外还有不常⽤的:cv2.line(), cv2.circle() , cv2.rectangle(), cv2.ellipse(), cv2.putText()cv2.setMouseCallback()——⿏标绘图import cv2import numpy as np#初始化drawing = False #为真时开始画图mode = True #为真时画举⾏,为假时画圆ix,iy = -1,-1def draw_circle(event,x,y,flags,param):global ix,iy,drawing,mode#⿏标左键按下时if event == cv2.EVENT_LBUTTONDOWN:drawing = Trueix,iy = x,y#⿏标移动时elif event == cv2.EVENT_MOUSEMOVE:if drawing == True:if mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)#⿏标抬起时elif event == cv2.EVENT_LBUTTONUP:drawing = Falseif mode == True:cv2.rectangle(img,(ix,iy),(x,y),(0,255,0),-1)else:cv2.circle(img,(x,y),5,(0,0,255),-1)#初始化图像img = np.zeros((512,512,3), np.uint8)dWindow('image')cv2.setMouseCallback('image',draw_circle)#按下"m"来切换模式while(1):cv2.imshow('image',img)k = cv2.waitKey(1) & 0xFFif k == ord('m'):mode = not modeelif k == 27:breakcv2.destroyAllWindows()array.item()、array.itemset()——查看并修改单⼀像素值import cv2import numpy as npimg = cv2.imread('messi5.jpg')# 指定像素点px = img[100,100]print(px)#[157 166 200]# 获取蓝⾊像素值blue = img[100,100,0]print(blue)#157img.shape img.size img.dtype —— 查看图⽚尺⼨、⼤⼩、数据类型>>> print img.shape(342, 548, 3)>>> print img.size562248>>> print img.dtypeuint8cv2.split cv2.merge —— 分离、合并通道(注意:有损分离)>>> b,g,r = cv2.split(img)>>> img = cv2.merge((b,g,r))#或者>>> b = img[:,:,0]#也可以通过这种形式快速指定红⾊通道像素值为0>>> img[:,:,2] = 0cv2.copyMakeBorder() —— 给图⽚加⼀个相框可以指定下列参数src - 你的图⽚top, bottom, left, right - 上下左右边框宽度borderType - 边框类型(下⾯详细展⽰,不做具体讲解)cv2.BORDER_CONSTANTcv2.BORDER_REFLECTcv2.BORDER_REFLECT_101 or cv2.BORDER_DEFAULTcv2.BORDER_REPLICATEcv2.BORDER_WRAPvalue - 当类型为cv2.BORDER_CONSTANT时需要额外指定的值1import cv22import numpy as np3from matplotlib import pyplot as plt45 BLUE = [255,0,0]67 img1 = cv2.imread('opencv_logo.png')89 replicate = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REPLICATE)10 reflect = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT)11 reflect101 = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_REFLECT_101)12 wrap = cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_WRAP)13 constant= cv2.copyMakeBorder(img1,10,10,10,10,cv2.BORDER_CONSTANT,value=BLUE)1415 plt.subplot(231),plt.imshow(img1,'gray'),plt.title('ORIGINAL')16 plt.subplot(232),plt.imshow(replicate,'gray'),plt.title('REPLICATE')17 plt.subplot(233),plt.imshow(reflect,'gray'),plt.title('REFLECT')18 plt.subplot(234),plt.imshow(reflect101,'gray'),plt.title('REFLECT_101')19 plt.subplot(235),plt.imshow(wrap,'gray'),plt.title('WRAP')20 plt.subplot(236),plt.imshow(constant,'gray'),plt.title('CONSTANT')2122 plt.show()cv2.inRange —— ⽤来追踪物体是⼀个常⽤于颜⾊识别的模型,相⽐BGR更易区分颜⾊,转换模式⽤COLOR_BGR2HSV表⽰。
opencv 静态库使用方法

opencv 静态库使用方法
OpenCV是一个开源的计算机视觉库,它提供了丰富的图像处理和计算机视觉功能。
要使用OpenCV的静态库,你需要按照以下步骤进行操作:
1. 下载和安装OpenCV,首先,你需要从OpenCV官方网站下载OpenCV库,并按照官方文档提供的安装指南进行安装。
安装过程中需要注意选择编译静态库的选项。
2. 创建一个新的C++项目,在你的集成开发环境(IDE)中创建一个新的C++项目,例如使用Visual Studio或者CLion。
3. 配置项目属性,在项目属性中,你需要添加OpenCV的头文件路径和静态库文件路径。
这可以通过设置包含目录和库目录来实现。
4. 链接OpenCV静态库,在项目属性中,你需要指定要链接的OpenCV静态库名称,这些库文件通常以“lib”开头,以“.lib”为后缀。
你可以在链接器设置中指定这些库文件。
5. 编写代码,现在你可以开始编写使用OpenCV函数的代码了。
记得包含OpenCV的头文件,并使用OpenCV的命名空间。
6. 编译和运行,完成以上步骤后,你可以编译你的项目并运行
程序了。
确保你的程序能够正常链接OpenCV静态库并调用其中的函数。
需要注意的是,使用OpenCV的静态库可能会增加你的程序的体积,因为所有的函数和依赖项都会被静态链接到你的程序中。
另外,不同版本的OpenCV可能需要不同的配置和设置,所以建议在使用之
前仔细阅读官方文档和参考资料。
希望这些步骤能够帮助你成功使
用OpenCV的静态库。
opencv中加减乘除

OpenCV中的加减乘除简介OpenCV是一个开源的计算机视觉库,提供了丰富的图像处理和计算机视觉算法。
在OpenCV中,加减乘除是常用的图像处理操作,可以实现图像的增强、滤波、混合等功能。
本文将介绍在OpenCV中如何使用加减乘除操作进行图像处理。
加法在OpenCV中,可以使用cv2.add()函数进行两幅图像的加法操作。
该函数将两幅图像对应位置的像素值相加,并返回结果。
import cv2import numpy as np# 读取两幅图像image1 = cv2.imread('image1.jpg')image2 = cv2.imread('image2.jpg')# 将两幅图像相加result = cv2.add(image1, image2)# 显示结果cv2.imshow('Addition', result)cv2.waitKey(0)cv2.destroyAllWindows()上述代码首先使用cv2.imread()函数读取两幅图像,然后使用cv2.add()函数将两幅图像相加得到结果。
最后使用cv2.imshow()函数显示结果。
减法在OpenCV中,可以使用cv2.subtract()函数进行两幅图像的减法操作。
该函数将第二幅图像从第一幅图像对应位置的像素值中减去,并返回结果。
import cv2import numpy as np# 读取两幅图像image1 = cv2.imread('image1.jpg')image2 = cv2.imread('image2.jpg')# 将第二幅图像从第一幅图像中减去# 显示结果cv2.imshow('Subtraction', result)cv2.waitKey(0)cv2.destroyAllWindows()上述代码首先使用cv2.imread()函数读取两幅图像,然后使用cv2.subtract()函数将第二幅图像从第一幅图像中减去得到结果。
个人整理的opencv最基本入门资料

个人整理的opencv最基本入门资料OpenCV最基本入门资料OpenCV(Open Source Computer Vision Library)是一个功能强大的开源计算机视觉库,用于处理图像和视频。
它提供了丰富的图像处理和计算机视觉算法,使开发者能够快速构建各种视觉应用程序。
本文将为您提供一份个人整理的OpenCV最基本入门资料,帮助您快速入门并了解OpenCV的基本概念和使用方法。
一、OpenCV简介OpenCV是跨平台的计算机视觉库,最初由英特尔公司于1999年开发并发布。
它包含了超过2500个优化的算法,涵盖了图像处理、特征提取、目标检测、机器学习等领域。
OpenCV支持多种编程语言,包括C++、Python、Java等,且具有良好的兼容性和扩展性。
二、安装OpenCV在开始学习OpenCV之前,首先需要安装OpenCV库。
下面是安装OpenCV的基本步骤:1.下载OpenCV:在OpenCV官方网站(不提供链接,请自行搜索)上下载适合您操作系统的OpenCV版本,并解压缩到本地目录。
2.配置环境变量:将OpenCV所在目录添加到系统的环境变量中,以便系统能够正确找到OpenCV库文件。
3.配置IDE:如果使用集成开发环境(IDE)进行开发,还需要配置IDE以正确链接和使用OpenCV库。
三、OpenCV基本概念在使用OpenCV之前,需要了解一些基本的概念:1.图像表示:OpenCV中的图像使用多维数组来表示,可以是二维的灰度图像,也可以是三维的彩色图像。
了解图像的表示方式有助于理解后续的图像处理操作。
2.像素操作:像素是图像的最基本单元,每个像素都包含了图像上某个位置的颜色信息。
OpenCV提供了各种像素操作函数,可以获取、设置、修改像素的值。
3.图像处理:OpenCV提供了丰富的图像处理函数,包括滤波、边缘检测、直方图均衡化等。
通过这些函数,可以对图像进行各种操作,实现图像的增强、降噪、特征提取等功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验六 OPENCV的基本操作张慧彬2013-8-24机器人研究中心目录一.OPENCV的基本算法及一般应用 (2)1.从磁盘加载并在屏幕上显示图象 (2)2.播放AVI视频 (3)3.视频播放控制 (4)4.载入一幅图象并进行平滑处理 (6)二.调试OPTICAL_FLOW_DEMO.CPP程序 (7)三.OENCV的应用之CANNY边缘检测 (8)1. C ANNY边缘检测基本原理 (8)2.C ANNY边缘检测流程 (8)四.试验总结及心得 (12)一. Opencv的基本算法及一般应用1.从磁盘加载并在屏幕上显示图象#include”highgui.h”int main(int argc,char** argv);{IplImage *img=cvLoadImage(agrv[1]); //将图像文件加载至内存,cvLoadImage()函数是一个高层调用接口,它通过文件名确定被加载文件的格式,。
IplImage结构体将是我们在使用OpenCV时会最常用到的数据结构cvNamedWindow(”Example 1”,CV_WINDOW_AUTOSIZE); // cvNamedWindow()函数用于在屏幕上创建一个窗口,将被显示的图像包含于该窗口中。
函数的第一个参数指定了该窗口的窗口标题,cvNamedWindow()函数的第二个参数定义了窗口的属性。
该参数可被设置为0(默认值)或CV_WINDOW_AUTOSIZE,设置为0时,窗口的大小不会因图像的大小而改变,图像只能在窗口中根据窗口的大小进行拉伸或缩放;而设置为CV_WINDOW_AUTOSIZE时,窗口则会根据图像的实际大小自动进行拉伸或缩放,以容纳图像cvShowImage(”Example 1”,img);// 只要有一个与某个图像文件相对应的IplImage*类型的指针,我们就可以在一个已创建好的窗口(使用cvNamedWindow()函数创建)中使用cvShowImage()函数显示该图像。
cvShowImage()函数通过设置其第一个参数确定在哪个已存在的窗口中显示图像。
cvShowImage()函数被调用时,该窗口将被重新绘制,并且图像也会显示在窗口中。
如果该窗口在创建时被指定CV_WINDOW_AUTOSIZE标志作为cvNamedWindow()函数的第二个参数,该窗口将根据图像的大小自动调整为与图像一致。
cvWaitKey(0);// 使程序暂停,等待用户触发一个按键操作。
但如果将该函数参数设为一个正数,则程序将暂停一段时间,时间长为该整数值个毫秒单位,然后继续执行程序,即使用户没有按下任何键。
当设置该函数参数为0或负数时,程序将一直等待用户触发按键操作。
cvReleaseImage(&img);// 通过为cvReleaseImage()函数传递一个类型为IplImage*的指针参数调用该函数,用以执行内存释放操作。
对cvReleaseImage()函数的调用执行完毕后,img指针将被设置为NULLcvDestroyWindow(“Example 1”);// cvDestroyWindow()函数将关闭窗口,并同时释放为该窗口所分配的所有内存(包括窗口内部的图像内存缓冲区,该缓冲区中保存了与img指针相关的图像文件像素信息的一个副本)}2. 播放AVI视频#include”highgui.h”int main(int argc,char **argv){cvNamedWindow(“Example 2”,CV_WINDOW_AUTOSIZE);CvCapture *capture=cvCreatFileCapture (argv[1]); // 函数cvCreateFileCapture()通过参数设置确定要读入的AVI文件,返回一个指向CvCapture结构的指针。
这个结构包括了所有关于要读入AVI文件的信息,其中包含状态信息。
在调用这个函数后,返回指针所指向的CvCapture结构被初始化到所对应AVI 文件的开头。
IplImage *frame;While(1){ frame=cvQueryFrame(capture);// 一旦进入while(1)循环,我们便开始读入AVI文件,cvQueryFrame的参数为CvCapture结构的指针。
用来将下一帧视频文件载入内存(实际是填充或更新CvCapture结构中)。
返回一个对应当前帧的指针If(!frame) break;cvShowImage(“Example 2”,frame);char c=cvWaitKey(33);if (c==27) break;}cvReleaseCapture(&capture);// 退出循环体(视频文件已经读入结束或者用户触发了Esc键)后,我们应该释放为CvCapture结构开辟的内存空间,这同时也会关闭所有打开的AVI文件相关的文件句柄。
cvDestroyWindow(“Example 2”);}3. 视频播放控制滚动条可以使我们方便地从视频的一帧跳到另外一帧。
我们通过调用cvCreateTrackbar()来创建一个滚动条,并且通过设置参数确定滚动条所属于的窗口。
为了获得所需的功能,只需要提供一个回调函数。
拖动滚动条,函数onTrackSlide()便被调用并被传入滚动条新的状态值.从本质上说,这种方法是通过添加一个全局变量来表示滚动条位置并且添加一个回调函数更新变量以及重新设置视频读入位置。
我们通过一个调用来创建滚动条和确定回调函数#include”cv.h”#include”highgui.h”int g_slider_position=0;CvCapture *capture=NULL;//首先为滚动条位置定义一个全局变量。
由于回调函数需要使用CvCapture对象,因此我们将它定义为全局变量void onTrackbarSlide(int pos){ cvSetCaptureProperty( g_capture,CV_CAP_PROP_POS_FRAMES,pos);} //现在我们定义一个回调函数,使其在滚动条被拖动时调用。
滚动条的位置会被作为一个32位整数以参数形式传入。
后面我们会常常看到函数cvSetCaptureProperty()被调用,同时与之配套的函数cvGetCaptureProperty()也经常会被调用。
这些函数允许我们设置(或查询)CvCapture对象的各种属性。
在本程序中我们设置参数CV_CAP_PROP_POS_ FRAMES(这个参数表示我们以帧数来设置读入位置,如果我们想通过视频长度比例来设置读入位置,我们可以通过用AVI_RATIO代替FRAMES来实现)。
最后,我们把新的滚动条位置作为参数传入int main(int argc,char**argv){ cvNamedWindow(“Example 3”,CV_WINDOW_AUTOSIZE);g_capture=cvCreatFileCapture(argv[1]);int frames=(int) cvGetCaptureProperty( g_capture,CV_CAP_PROP_FRAME_COUNT);// 当需要从CvCapture结构查询数据时,可使用cvGetCaptureProperty函数if(frames!=0){ cvCreateTrackbar( “position”,“Example 3”,&g_slider_position,frames,onTrackbarSlide);}//前面的代码用来创建滚动条,借助函数cvCreateTrackbar(),我们可设置滚动条的名称并确定滚动条的所属窗口。
我们将一个变量绑定到这个滚动条来表示滚动条的最大值和一个回调函数(不需要回调函数时置为空,当滚动条被拖动时触发)。
仔细分析,你会发现一点:cvGetCaptureProperty()返回的帧数为0时,滚动条不会被创建。
这是因为对于有些编码方式,总的帧数获取不到,在这种情况下,我们只能直接播放视频文件而看不到滚动条IplImage*frame;// While loop (as in Example 2) capture & show video// Release memory and destroy windowreturn(0);}4. 载入一幅图象并进行平滑处理.#include”cv.h”#include”highgui.h”void example2_4(IplImage *image){ cvNamedWindow(“example4-in”);cvNamedWindow(“example4-out”); //creat some windows to show the input and output images incvShowImage(“example4-in”,image);//show our input imageIplImage*out=cvCreatImage(cvGetSize(image),IPL_DEPTH_8U,3);//creat an image to hold the smooth output 。
第一个参数是一个CvSize结构,这个结构可以通过cvGetSize(image)方便地获得;第一个参数说明了当前图像结构的大小。
第二个参数告诉了我们各通道每个像素点的数据类型,最后一个参数说明了通道的总数。
所以从程序中可以看出,当前图像是3个通道(每个通道8位),图像大小同image。
cvSmooth(image,out,CV_GAUSSIAN,3,3);//do the smooth 我们通过使用每个像素周围3*3区域进行高斯平滑处理cvShowImage(“example4-out”,out);//show the smoothed image in the output windowcvReleaseImage(&out);//be tidy 现在我们可以在我们新窗口中显示处理后的图像然后释放它:cvReleaseImage()通过给定一个指向IplImage*的指针来释放与图像对应的内存空间。
cvWaitKey(0);//wait for the user to hit a key ,then clean up the windowscvDestroyWindow(“example4-in”);cvDestroyWindow(“example4-out”);}二.调试optical_flow_demo.cpp程序此程序是稀疏光流演示程序,对物体进行视频跟踪处理,在代码中可以看出这是只是一个内联图像分配。