学习和研究计算机视觉,必然绕不开OpenCV。

于是我下载了它的C++源码,用cmake编译遇到一些错误。

然后结合网上一些帖子看源码看了好几天,发现有点不知从何处入手。

于是准备从其python版本的使用来入门。参考书籍:"Learning OpenCV 3 Computer Vision with Python(Second Edition)"

1. 基本IO

1.1 读写图像文件

IMREAD_ANYCOLOR = 4

IMREAD_ANYDEPTH = 2

IMREAD_COLOR = 1

IMREAD_GRAYSCALE = 0

IMREAD_LOAD_GDAL = 8

IMREAD_UNCHANGED = -1

import cv2
# img = cv2.imread('xyc.jpg')
grayImage = cv2.imread('xyc.jpg', cv2.IMREAD_GRAYSCALE)
cv2.imwrite('xyc.jpg', grayImage)

无论采用哪种模式,imread()函数都会删除所有alpha通道的信息(透明度)

imwrite()函数要求图像为BGR格式或灰度格式,并且每个通道有一定的位,输出格式要支持这些通道。

1.2 图像与原始字节之间的转换

# numpy.random.randint(0, 256, 120000).reshape(300, 400)
# urandom()Return a string of n random bytes suitable for cryptographic use
# bytearray()方法返回一个新字节数组。这个数组里的元素是可变的,并且每个元素的值范围: 0 <= x < 256
randomByteArray = bytearray(os.urandom(120000))
# Create an array
flatNumpyArray = numpy.array(randomByteArray)
grayImage = flatNumpyArray.reshape(300, 400)
cv2.imwrite('RandomGray.png', grayImage)
bgrImage = flatNumpyArray.reshape(100, 400, 3)
cv2.imwrite('RandomColor.png', bgrImage)

1.3 用numpy.array访问图像数据

img.shape

img.size

img.dtype

img.item(150, 120, 0)

img.itemset((150, 120,0 ), 255)

img[:, :, 1] = 0将所有G值设为零

my_roi = img[0:100, 0:100]

img[300:400, 300: 400] = my_roi

1.4 视频文件的读写

读取AVI文件的帧, 并采用YUV颜色编码写入另一帧

videoCapture = cv2.VideoCapture('MyInputVid.avi')

fps = videoCapture.get(cv2.CAP_PROP_FPS)

size = (int(videoCapture.get(cv2.CAP_PROP_FRAME_WIDTH)),

            int(videoCapture.get(cv2.CAP_PROP_FRAME_HEIGHT)))

videoWriter = cv2.VideoWriter('MyOutputvid', cv2.VideoWriter_fourcc('I', '4', '2', '0'), fps, size)

success,frame = videoCapture.read()

指定视频解编码器常用选项:

cv2.VideoWriter_fourcc('I', '4', '2', '0')未压缩的YUV颜色编码,是4:2:0色度子采样。文件扩展名.avi

cv2.VideoWriter_fourcc('P', 'I', 'M', '1') MPEG-1类型编码,文件扩展名.avi

cv2.VideoWriter_fourcc('X', 'V', 'I', 'D') MPEG-4类型编码,文件扩展名.avi

cv2.VideoWriter_fourcc('T', 'H', 'E', 'O') Ogg Vorbis, 文件扩展名为.ogv

cv2.VideoWriter_fourcc('F', 'L', 'V', '1') Flash视频, 文件扩展名为.flv

1.5 捕获摄像头的帧

1.6 在窗口显示图像

1.7 在窗口显示摄像头帧

2. Cameo项目(人脸跟踪和图像处理)

Opencv-Python学习笔记(一)的更多相关文章

  1. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

  2. OpenCV入门学习笔记

    OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...

  3. python学习笔记整理——字典

    python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...

  4. VS2013中Python学习笔记[Django Web的第一个网页]

    前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...

  5. python学习笔记之module && package

    个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...

  6. python学习笔记(六)文件夹遍历,异常处理

    python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...

  7. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

  8. python学习笔记--Django入门0 安装dangjo

    经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...

  9. python学习笔记(一)元组,序列,字典

    python学习笔记(一)元组,序列,字典

  10. Pythoner | 你像从前一样的Python学习笔记

    Pythoner | 你像从前一样的Python学习笔记 Pythoner

随机推荐

  1. Windows10中使用Anaconda安装keras-gpu版本(遇到的坑)

    1.使用conda install tensorflow-gpu 2.使用pip install keras 这里使用pip安装而不是使用conda,原因是使用conda安装会默认安装cpu版本的te ...

  2. linux下怎么清理缓存

    free -m 命令可以查看内存使用情况 sysctl 命令可以临时改变某个系统参数  如:sysctl -w net.ipv4.ip_forward=1 是将forware参数临时改为1 当 ser ...

  3. 序列化模块_pickle

    序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...

  4. (转)SQLServer_十步优化SQL Server中的数据访问五

    第九步:合理组织数据库文件组和文件 创建SQL Server数据库时,数据库服务器会自动在文件系统上创建一系列的文件,之后创建的每一个数据库对象实际上都是存储在这些文件中的.SQL Server有下面 ...

  5. 最近想学Json,请问大家有没有什么好的Json教程介绍一下?

    最近想学json,请问大家有没有什么好的Json教程介绍一下? 最近学完java的框架了,想了解一下json,可是找不到相关视频,请大家有这方面的Json教程好资料就介绍下啦,最后有网址链接啦. {} ...

  6. Linux下Docker快速部署LAMP

    文章目录 拿来即用 获取LAMP LAMP版本 icoty1/lamp:v1.1.0制作过程 获取ubuntu基础镜像 安装依赖 mysql apache/php phpmyadmin 使apache ...

  7. Java 转JSON串

    一.JSON (JavaScript Object Notation) 1.轻量级数据交换格式能够替代XML的工作 2.数据格式比较简单, 易于读写, 格式都是压缩的, 占用带宽小(简洁.简单.体积小 ...

  8. 树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法

    树莓派(Raspberry Pi 3)安装centos7后yum无法使用解决办法 人穷,闲鱼淘了个二手的树莓派3 英国版,无奈咱也不会用,很无奈~ 安装教程百度到的差不多都可以,找个格式正常的一步一步 ...

  9. Spring 依赖注入(基本注入和自动适配注入)

    Spring 依赖注入 Spring框架的核心功能之一就是通过依赖注入的方式来管理Bean之间的依赖关系. 属性注入 构造注入 内部注入 自动装配 1.属性注入 IService: public in ...

  10. 从 注解和继承 到 JAXB中的注意事项

    从 注解和继承 到 JAXB中的注意事项 注解在继承中的行为 如果一个父类添加了一个注解,子类是否能取到这个注解呢?如下 package inheritance; import java.lang.a ...