美高梅官方网站3045-mgm6608美高梅app下载
mgm6608美高梅app下载无标给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV题文章

mgm6608美高梅app下载无标给深度学习入门者的Python快速教程 - 番外篇之Python-OpenCV题文章

作者:mgm6608美高梅app下载    来源:未知    发布时间:2020-01-11 20:59    浏览量:

  1. 实例化Pipeline 对象,通过指定包含要处理图片所在的目录;
  2. 定义数据增强操作,crop、rotate等等,添加到pipeline中;
  3. 调用pipeline的sample函数,同时指定增强后的样本总量;

'Horse', (255, 255, 0)'Hill', (0, 255, 255)'DiaoSi', (0, 0, 255)

10. 粘贴图片

为了效果,裁剪该图片的一部分然后旋转,最后粘贴到指定区域:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 裁剪图片 box为裁剪图片的区域范围
  8. box = (100, 100, 250, 250)
  9. region = img.crop(box)
  10. region.show()
  11. ``
  12. # 逆时针旋转图片180度
  13. region2 = region.transpose(Image.ROTATE_180)
  14. region2.show()
  15. ``
  16. # 图片的粘贴
  17. img.paste(region2, box)
  18. img.show()

运行:

mgm6608美高梅app下载 1

 

Augmentor包含许多用于标准图像处理功能的类,例如Rotate 旋转类、Crop 裁剪类等等。 包含的操作有:旋转rotate、裁剪crop、透视perspective skewing、shearing、弹性形变Elastic Distortions、亮度、对比度、颜色等等;更多的操作及其参数设定,点击

「真诚赞赏,手留余香」

一、引入图像模块

  1. PIL简介:PIL(Python Imaging Library Python,图像处理类库)提供了通用的图像处理功能,以及大量有用的基本图像操作,比如图像缩放、裁剪、旋转、颜色转换等。利用 PIL 中的函数,我们可以从大多数图像格式的文件中读取数据,然后写入最常见的图像格式文件中。PIL 中最重要的模块为 Image 。
  1. 引入PIL:

  2. from PIL import Image

注意:有一些教程默认是用import Image的,但是在window 的64位系统中如果没有在cmd中执行pip install PIL是找不到Image模块的,所以呢必须先安装Pillow,在cmd中运行pip install Pillow,这里也要变成from PIL import Image

数据增强通常是一个多阶段过程,Augmentor因此采用基于管道的处理方法,操作依次添加形成最终的操作管道。图像送到管道中,管道的操作依次作用到图片上形成新的图片,保存下来。Augmentor 管道中定义的操作按照一定的概率随机地作用于图片上。

本书只讲Python下OpenCV基本使用,Python中导入OpenCV非常简单:

8. 某个像素点的色彩值的获取以及更改

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 获取某个像素位置的值
  8. print img.getpixel((100, 100))
  9. ``
  10. # 更改某个像素位置的值
  11. img.putpixel((100, 100), (0, 0, 0))

推荐自己动手试一试。网址

>> cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..

2. 显示图片

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 显示图片
  8. img.show()

在PyCharm下运行呢,会直接调用Windows照片查看器来显示图片

控制台输入:

在这些思路和设计下,我们定义标注信息文件的格式的例子如下:

6. 缩放图片

要调整一幅图像的尺寸,我们可以调用 resize() 方法。该方法的参数是一个元组,用来指定新图像的大小:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 缩放图片为50*50
  8. resize1 = img.resize((50, 50))
  9. resize1.show()

增强后的图片文件保存在images下的output中。

图像的仿射变换涉及到图像的形状位置角度的变化,是深度学习预处理中常到的功能,在此简单回顾一下。仿射变换具体到图像中的应用,主要是对图像的缩放旋转剪切翻转平移的组合。在OpenCV中,仿射变换的矩阵是一个2×3的矩阵,其中左边的2×2子矩阵是线性变换矩阵,右边的2×1的两项是平移项:

编辑器:PyCharm

import Augmentor# 1. 指定图片所在目录p = Augmentor.Pipeline("./images")# 2. 增强操作# 旋转 概率0.7,向左最大旋转角度10,向右最大旋转角度10p.rotate(probability=0.7,max_left_rotation=10, max_right_rotation=10)# 放大 概率0.3,最小为1.1倍,最大为1.6倍;1不做变换p.zoom(probability=0.3, min_factor=1.1, max_factor=1.6)# resize 同一尺寸 200 x 200p.resize(probability=1,height=200,width=200)# 3. 指定增强后图片数目总量p.sample

执行这段代码得到如下窗口:

3. 生成缩略图

thumbnail() 方法接受一个元组参数(该参数指定生成缩略图的大小),然后将图像转换成符合元组参数指定大小的缩略图。

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 生成缩略图
  8. img.thumbnail((128, 128))
  9. ``
  10. # 显示图片
  11. img.show()

这样运行之后就会显示128*128的图片

Augmentor是一个Python包,旨在帮助机器学习任务的图像数据人工生成和数据增强。它主要是一种数据增强工具,但也将包含基本的图像预处理功能。

importosfromitertoolsimportcycleimportcv2# 列出frames文件夹下的所有图片filenames=os.listdir('frames')# 通过itertools.cycle生成一个无限循环的迭代器,每次迭代都输出下一张图像对象img_iter=cycle([cv2.imread(os.sep.join(['frames',x]))forxinfilenames])key=0whilekey&0xFF!=27:cv2.imshow('Animation',next(img_iter))key=cv2.waitKey(42)

7. 图片灰度化

图像的颜色转换可以使用 convert() 方法来实现。要读取一幅图像,并将其转换成灰度图像,只需要加上 convert('L'),如下:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 图片转换为灰度
  8. grey = img.convert('L')
  9. grey.show()

运行后:

mgm6608美高梅app下载 2

 

分3步:

importcv2

二、读取与存储操作

  1. PIL 的 open() 函数用于创建 PIL 图像对象,比如读取一张图片:

  2. # coding=utf-8

  3. from PIL import Image
  4. ``
  5. # 读取图片
  6. img = Image.open('qq_image.jpg')

注意:在该路径下必须有qq_image.jpg图片,否则会出错

  1. 存储图片:

save() 方法用于保存图像到具有指定文件名的文件。通过 save() 方法,PIL 可以将图像保存成多种格式的文件,PIL 是个足够智能的类库,可以根据文件扩展名来判定图像的格式。比如:img.save('qq_image_thumb.jpg', 'JPEG'),PIL 函数会进行简单的检查,如果文件不是 JPEG 格式,会自动将其转换成 JPEG 格式;如果转换失败,它会在控制台输出一条报告失败的消息。

为了效果,生成缩略图并且保存为qq_image_thumb.jpg:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 生成缩略图
  8. img.thumbnail((128, 128))
  9. ``
  10. # 保存图片
  11. img.save('qq_image_thumb.jpg', 'JPEG')

运行后,进去文件目录:

mgm6608美高梅app下载 3

 

Augmentor是用于图像增强的软件包,重点在于提供通常用于生成机器学习问题的图像数据的操作。

6.4 用OpenCV实现数据标注小工具

5. 翻转

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 左右对换
  8. rorate3 = img.transpose(Image.FLIP_LEFT_RIGHT)
  9. rorate3.show()
  10. ``
  11. # 上下翻转
  12. rorate4 = img.transpose(Image.FLIP_TOP_BOTTOM)
  13. rorate4.show()

运行后:

rorate3:

mgm6608美高梅app下载 4

 

rorate4:

mgm6608美高梅app下载 5

 

最近遇到数据样本数目不足的问题,自己写的增强工具生成数目还是不够,终于在网上找到一个数据增强工具包,足够高级,足够傻瓜。想要多少就有多少!再也不怕数据不够了!

如果不考虑视频应用,以上三个就是最核心和常用的模块了。针对视频和一些特别的视觉应用,OpenCV也提供了强劲的支持:

三、图像的一些基本操作

  • 个人认为其最大的亮点是只需要指定要增强图片所在的路径即可,不用进行读入、以及numpy数据转换;
  • 增强时只需要指定最后的数目N,无论原始图片有多少,总能生成你想要的数目!!!
  • API也高度抽象;容易理解、上手!
  • 增强后的图片会保存在指定增强图片所在目录下的output目录里;

6.3.4 多进程调用加速处理

1. 输出图片的信息(格式、尺寸以及图像类型)

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 输出图片的格式,尺寸以及图像类型
  8. print img.format, img.size, img.mode

输出:JPEG (355, 346) RGB

mgm6608美高梅app下载 6

4. 旋转图片

要旋转一幅图像,可以使用逆时针方式表示旋转角度,然后调用 rotate() 方法:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 逆时针旋转45度
  8. rorate1 = img.rotate(45)
  9. rorate1.show()
  10. ``
  11. # 逆时针旋转90
  12. rorate2 = img.transpose(Image.ROTATE_90)
  13. rorate2.show()

运行后如图:

rorate1:

mgm6608美高梅app下载 7

由于尺寸不变,旋转45度之后会填白

rorate2:

mgm6608美高梅app下载 8

 

注意:只有选择90度,180度以及270度的时候才能用img.transpose(Image.ROTATE_90),其他角度用rotate

pip install Augmentor

需要注意的是,对于图像而言,宽度方向是x,高度方向是y,坐标的顺序和图像像素对应下标一致。所以原点的位置不是左下角而是右上角,y的方向也不是向上,而是向下。在OpenCV中实现仿射变换是通过仿射变换矩阵和cv2.warpAffine()这个函数,还是通过代码来理解一下,例子中图片的分辨率为600×400:

文件地址:D:phpStudyWWWpythonImage

安装成功。

执行这段代码得到如下的图像:

环境:windows 7 64位系统

OpenCV显示一幅图片的函数是cv2.imshow(),第一个参数是显示图片的窗口名称,第二个参数是图片的array。不过如果直接执行这个函数的话,什么都不会发生,因为这个函数得配合cv2.waitKey()一起使用。cv2.waitKey()指定当前的窗口显示要持续的毫秒数,比如cv2.waitKey(1000)就是显示一秒,然后窗口就关闭了。比较特殊的是cv2.waitKey(0),并不是显示0毫秒的意思,而是一直显示,直到有键盘上的按键被按下,或者鼠标点击了窗口的小叉子才关闭。cv2.waitKey()的默认参数就是0,所以对于图像展示的场景,cv2.waitKey()或者cv2.waitKey(0)是最常用的:

版本信息:2.7.11

- highgui:提供了用户界面和文件读取的基本函数,比如图像显示窗口的生成和控制,图像/视频文件的IO等。

9. 裁剪图片

使用 crop() 方法可以从一幅图像中裁剪指定区域:

  1. # coding=utf-8
  2. from PIL import Image
  3. ``
  4. # 读取图片
  5. img = Image.open('qq_image.jpg')
  6. ``
  7. # 裁剪图片 box为裁剪图片的区域范围
  8. box = (100, 100, 250, 250)
  9. region = img.crop(box)
  10. region.show()

运行输出:

mgm6608美高梅app下载 9

 注意:Python规定左上角为(0, 0)的坐标点,box由一个4元组(左,上,右,下)定义,表示为坐标为: (left, upper, right, lower),最后的两个数字必须比前面两个要大。如图:

mgm6608美高梅app下载 10

- contrib:一些实验性质的算法,考虑在未来版本中加入的。

总结:

如果需要更强大的图像处理操作的话,可以使用Matplotlib类库,它具有比PIL更强大的绘图功能,比如说可以绘制出强大的条形图、饼状图、散点图等。

和Python一样,当前的OpenCV也有两个大版本,OpenCV2和OpenCV3。相比OpenCV2,OpenCV3提供了更强的功能和更多方便的特性。不过考虑到和深度学习框架的兼容性,以及上手安装的难度,这部分先以2为主进行介绍。

运行工具:PyCharm

6.2 Python-OpenCV基础

就导入成功了。

调用这些函数需要通过一个主程序。这个主程序里首先定义三个子模块,定义一个函数parse_arg()通过Python的argparse模块定义了各种输入参数和默认值。需要注意的是这里用argparse来输入所有参数是因为参数总量并不是特别多,如果增加了更多的扰动方法,更合适的参数输入方式可能是通过一个配置文件。然后定义一个生成待处理图像列表的函数generate_image_list(),根据输入中要增加图片的数量和并行进程的数目尽可能均匀地为每个进程生成了需要处理的任务列表。执行随机扰动的代码定义在augment_images()中,这个函数是每个进程内进行实际处理的函数,执行顺序是镜像

- ocl:利用OpenCL并行加速的一些接口。

- nonfree:受到专利保护的一些算法,其实就是SIFT和SURF。

6.3.2 随机旋转

- flann:最近邻算法库,Fast Library for Approximate Nearest Neighbors,用于在多维空间进行聚类和检索,经常和关键点匹配搭配使用。

- ml:机器学习算法模块,包含一些视觉中最常用的传统机器学习算法。

在这个例子中我们采用了Python的itertools模块中的cycle函数,这个函数可以把一个可遍历结构编程一个无限循环的迭代器。另外从这个例子中我们还发现,cv2.waitKey()返回的就是键盘上出发的按键。对于字母就是ascii码,特殊按键比如上下左右等,则对应特殊的值,其实这就是键盘事件的最基本用法。

importnumpyasnpimportcv2# 定义一块宽600,高400的画布,初始化为白色canvas=np.zeros((400,600,3),dtype=np.uint8)+255# 画一条纵向的正中央的黑色分界线cv2.line(canvas,(300,0),(300,399),(0,0,0),2)# 画一条右半部份画面以150为界的横向分界线cv2.line(canvas,(300,149),(599,149),(0,0,0),2)# 左半部分的右下角画个红色的圆cv2.circle(canvas,(200,300),75,(0,0,255),5)# 左半部分的左下角画个蓝色的矩形cv2.rectangle(canvas,(20,240),(100,360),(255,0,0),thickness=3)# 定义两个三角形,并执行内部绿色填充triangles=np.array([[(200,240),(145,333),(255,333)],[(60,180),(20,237),(100,237)]])cv2.fillPoly(canvas,triangles,(0,255,0))# 画一个黄色五角星# 第一步通过旋转角度的办法求出五个顶点phi=4*np.pi/5rotations=[[[np.cos(i*phi),-np.sin(i*phi)],[i*np.sin(phi),np.cos(i*phi)]]foriinrange(1,5)]pentagram=np.array([[[[0,-1]]+[np.dot(m,(0,-1))forminrotations]]],dtype=np.float)# 定义缩放倍数和平移向量把五角星画在左半部分画面的上方pentagram=np.round(pentagram*80+np.array([160,120])).astype(np.int)# 将5个顶点作为多边形顶点连线,得到五角星cv2.polylines(canvas,pentagram,True,(0,255,255),9)# 按像素为间隔从左至右在画面右半部份的上方画出HSV空间的色调连续变化forxinrange(302,600):color_pixel=np.array([[[round(180*float(x-302)/298),255,255]]],dtype=np.uint8)line_color=[int(c)forcincv2.cvtColor(color_pixel,cv2.COLOR_HSV2BGR)[0][0]]cv2.line(canvas,(x,0),(x,147),line_color)# 如果定义圆的线宽大于半斤,则等效于画圆点,随机在画面右下角的框内生成坐标np.random.seed(42)n_pts=30pts_x=np.random.randint(310,590,n_pts)pts_y=np.random.randint(160,390,n_pts)pts=zip(pts_x,pts_y)# 画出每个点,颜色随机forptinpts:pt_color=[int(c)forcinnp.random.randint(0,255,3)]cv2.circle(canvas,pt,3,pt_color,5)# 在左半部分最上方打印文字cv2.putText(canvas,'Python-OpenCV Drawing Example',(5,15),cv2.FONT_HERSHEY_SIMPLEX,0.5,(0,0,0),1)cv2.imshow('Example of basic drawing functions',canvas)cv2.waitKey()

执行exe安装后,会在<安装目录>/build/python/2.7下发现一个叫cv2.pyd的文件,把这个文件拷贝到Libsite-packages下,就可以了。Windows下如果只想在Python中体验OpenCV还有个更简单的方法是加州大学尔湾分校(University of California, Irvine)的Christoph Gohlke制作的Windows下的Python科学计算包网页,下载对应版本的wheel文件,然后通过pip安装:

对于图像上的任一位置(x,y),仿射变换执行的是如下的操作:

Video Codecs by FOURCC

importcv2# 读取一张400x600分辨率的图像color_img=cv2.imread('test_400x600.jpg')print(color_img.shape)# 直接读取单通道gray_img=cv2.imread('test_400x600.jpg',cv2.IMREAD_GRAYSCALE)print(gray_img.shape)# 把单通道图片保存后,再读取,仍然是3通道,相当于把单通道值复制到3个通道保存cv2.imwrite('test_grayscale.jpg',gray_img)reload_grayscale=cv2.imread('test_grayscale.jpg')print(reload_grayscale.shape)# cv2.IMWRITE_JPEG_QUALITY指定jpg质量,范围0到100,默认95,越高画质越好,文件越大cv2.imwrite('test_imwrite.jpg',color_img,(cv2.IMWRITE_JPEG_QUALITY,80))# cv2.IMWRITE_PNG_COMPRESSION指定png质量,范围0到9,默认3,越高文件越小,画质越差cv2.imwrite('test_imwrite.png',color_img,(cv2.IMWRITE_PNG_COMPRESSION,5))

这些处理的效果见图6-2。

>> make

作为裁剪后画面的宽高比扰动的比例,则裁剪后画面的宽和高分别为:

在图中,可以看到,限制内接矩形大小的主要是原画面更靠近中心的那条边,也就是图中比较长的一条边AB。因此我们只要沿着中心O和内接矩形的顶点方向的直线,求出和AB的交点P,就得到了内接矩形的大小。先来看长边的方程,考虑之前画面和横轴相交的点,经过角度-θ旋转后,到了图中的Q点所在:

6.2.2 基本图像处理

http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

注意到在这个问题中,每个象限和相邻象限都是轴对称的,而且旋转角度对剪裁宽度和长度的影响是周期(T=π)变化,再加上我们关心的其实并不是四个点的位置,而是旋转后要截取的矩形的宽w’和高h’,所以复杂的分区间情况也简化了,首先对于旋转角度,因为周期为π,所以都可以化到0到π之间,然后因为对称性,进一步有:

>> mkdir release

6.3 用OpenCV实现数据增加小工具

mgm6608美高梅app下载 11

到目前我们已经熟悉了numpy中的随机模块,多进程调用和OpenCV的基本操作,基于这些基础,本节将从思路到代码一步步实现一个最基本的数据增加小工具。

这时候考虑OP这条直线:

http://images.cnitblog.com/blog2015/609274/201503/251904209276278.gif

来源

DOWNLOADS | OpenCV

whilekey!=27:cv2.imshow('Honeymoon Island',img)key=cv2.waitKey()# 如果获取的键值小于256则作为ascii码输出对应字符,否则直接输出值msg='{} is pressed'.format(chr(key)ifkey<256elsekey)print(msg)

不管是RGB还是BGR,都是高度×宽度×通道数,H×W×C的表达方式,而在深度学习中,因为要对不同通道应用卷积,所以用的是另一种方式:C×H×W,就是把每个通道都单独表达成一个二维矩阵,如图6-1c所示。

除了区域,图像本身的属性操作也非常多,比如可以通过HSV空间对色调和明暗进行调节。HSV空间是由美国的图形学专家A. R. Smith提出的一种颜色空间,HSV分别是色调(Hue),饱和度(Saturation)和明度(Value)。在HSV空间中进行调节就避免了直接在RGB空间中调节是还需要考虑三个通道的相关性。OpenCV中H的取值是[0, 180),其他两个通道的取值都是[0, 256),下面例子接着上面例子代码,通过HSV空间对图像进行调整:

- imgproc:图像处理模块,包含和图像相关的基础功能(滤波,梯度,改变大小等),以及一些衍生的高级功能(图像分割,直方图,形态分析和边缘/直线提取等)。

当然也可以通过官网下载源码编译安装,第一步先安装各种依赖:

这个例子实现了延时摄影的功能,把程序打开并将摄像头对准一些缓慢变化的画面,比如桌上缓慢蒸发的水,或者正在生长的小草,就能制作出有趣的延时摄影作品。比如下面这个链接中的图片就是用这段程序生成的:

因为明暗度并不会对图像的直方图相对分布产生大的影响,所以在HSV扰动基础上,考虑再加入一个Gamma扰动,方法是设定一个大于1的Gamma值的上限γ,因为这个值通常会和1是一个量级,再用均匀采样的近似未必合适,所以从-logγ到logγ之间均匀采样一个值α,然后用

# 定义鼠标事件回调函数defon_mouse(event,x,y,flags,param):# 鼠标左键按下,抬起,双击ifevent==cv2.EVENT_LBUTTONDOWN:print('Left button down at ({}, {})'.format(x,y))elifevent==cv2.EVENT_LBUTTONUP:print('Left button up at ({}, {})'.format(x,y))elifevent==cv2.EVENT_LBUTTONDBLCLK:print('Left button double clicked at ({}, {})'.format(x,y))# 鼠标右键按下,抬起,双击elifevent==cv2.EVENT_RBUTTONDOWN:print('Right button down at ({}, {})'.format(x,y))elifevent==cv2.EVENT_RBUTTONUP:print('Right button up at ({}, {})'.format(x,y))elifevent==cv2.EVENT_RBUTTONDBLCLK:print('Right button double clicked at ({}, {})'.format(x,y))# 鼠标中/滚轮键(如果有的话)按下,抬起,双击elifevent==cv2.EVENT_MBUTTONDOWN:print('Middle button down at ({}, {})'.format(x,y))elifevent==cv2.EVENT_MBUTTONUP:print('Middle button up at ({}, {})'.format(x,y))elifevent==cv2.EVENT_MBUTTONDBLCLK:print('Middle button double clicked at ({}, {})'.format(x,y))# 鼠标移动elifevent==cv2.EVENT_MOUSEMOVE:print('Moving at ({}, {})'.format(x,y))# 为指定的窗口绑定自定义的回调函数cv2.namedWindow('Honeymoon Island')cv2.setMouseCallback('Honeymoon Island',on_mouse)

OpenCV提供了各种绘图的函数,可以在画面上绘制线段,圆,矩形和多边形等,还可以在图像上指定位置打印文字,比如下面例子:

mgm6608美高梅app下载 12

想象一下先把这个宽为w’,高为h’的区域置于原画面的右下角,则这个区域的左上角和原画面的左上角框出的小区域,如图中的虚线框所示,就是裁剪后区域左上角可以取值的范围。所以在这个区域内随机采一点作为裁剪区域的左上角,就实现了如图中位置随机,且宽高比也随机的裁剪。

importcv2importtimeinterval=60# 捕获图像的间隔,单位:秒num_frames=500# 捕获图像的总帧数out_fps=24# 输出文件的帧率# VideoCapture(0)表示打开默认的相机cap=cv2.VideoCapture(0)# 获取捕获的分辨率size=(int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)),int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)))# 设置要保存视频的编码,分辨率和帧率video=cv2.VideoWriter("time_lapse.avi",cv2.VideoWriter_fourcc('M','P','4','2'),out_fps,size)# 对于一些低画质的摄像头,前面的帧可能不稳定,略过foriinrange(42):cap.read()# 开始捕获,通过read()函数获取捕获的帧try:foriinrange(num_frames):_,frame=cap.read()video.write(frame)# 如果希望把每一帧也存成文件,比如制作GIF,则取消下面的注释# filename = '{:0>6d}.png'.format(i)# cv2.imwrite(filename, frame)print('Frame {} is captured.'.format(i))time.sleep(interval)exceptKeyboardInterrupt:# 提前停止捕获print('Stopped! {}/{} frames captured!'.format(i,num_frames))# 释放资源并写入视频文件video.release()cap.release()

>> sudo make install

缩放通过cv2.resize()实现,裁剪则是利用array自身的下标截取实现,此外OpenCV还可以给图像补边,这样能对一幅图像的形状和感兴趣区域实现各种操作。下面的例子中读取一幅400×600分辨率的图片,并执行一些基础的操作:

下一篇:没有了
友情链接: 网站地图
Copyright © 2015-2019 http://www.zen-40.com. mgm美高梅有限公司 版权所有