Opencv-Python学习笔记(一)
学习和研究计算机视觉,必然绕不开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学习笔记(一)的更多相关文章
- OpenCV之Python学习笔记
OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...
- OpenCV入门学习笔记
OpenCV入门学习笔记 参照OpenCV中文论坛相关文档(http://www.opencv.org.cn/) 一.简介 OpenCV(Open Source Computer Vision),开源 ...
- python学习笔记整理——字典
python学习笔记整理 数据结构--字典 无序的 {键:值} 对集合 用于查询的方法 len(d) Return the number of items in the dictionary d. 返 ...
- VS2013中Python学习笔记[Django Web的第一个网页]
前言 前面我简单介绍了Python的Hello World.看到有人问我搞搞Python的Web,一时兴起,就来试试看. 第一篇 VS2013中Python学习笔记[环境搭建] 简单介绍Python环 ...
- python学习笔记之module && package
个人总结: import module,module就是文件名,导入那个python文件 import package,package就是一个文件夹,导入的文件夹下有一个__init__.py的文件, ...
- python学习笔记(六)文件夹遍历,异常处理
python学习笔记(六) 文件夹遍历 1.递归遍历 import os allfile = [] def dirList(path): filelist = os.listdir(path) for ...
- python学习笔记--Django入门四 管理站点--二
接上一节 python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...
- python学习笔记--Django入门0 安装dangjo
经过这几天的折腾,经历了Django的各种报错,翻译的内容虽然不错,但是与实际的版本有差别,会出现各种奇葩的错误.现在终于找到了解决方法:查看英文原版内容:http://djangobook.com/ ...
- python学习笔记(一)元组,序列,字典
python学习笔记(一)元组,序列,字典
- Pythoner | 你像从前一样的Python学习笔记
Pythoner | 你像从前一样的Python学习笔记 Pythoner
随机推荐
- 去中心化存储项目终极指南 | Filecoin, Storj 和 PPIO 项目技术对比(下)
在上篇文章中,我们主要从价值定位.技术层次架构.服务质量.去中心化程度,和经济激励机制五个方面分析了三个项目的不同.在这一篇文章中,我们将着重从区块链的架构设计.数据传输技术设计和数据存储技术设计三方 ...
- 初学者常用的LINUX命令
测试初学者常用的LINUX命令 一.常用管理命令:1. shutdown -h now 关机命令2. shutdown -r now (reboot) 立即重启命令 3. clear 清屏命令 4. ...
- [STM32F103]定时器PWM输入
typedef struct { uint16_t TIM_OCMode; //PWM模式1或者模式2 uint16_t TIM_OutputState; //输出使能 OR失能 uint16_t ...
- python版本的简单贪吃蛇
先看看效果,白色的条是蛇(简单勿怪,有研究的同学请告知做的美观点),做了一个笑脸是糖果,背景弄了一个图, 代码也是从其他人那边弄来的,改了一部分直接可以在window上直接运行 代码如下: #codi ...
- 【转载】 github vue 高星项目
内容 UI组件 开发框架 实用库 服务端 辅助工具 应用实例 Demo示例 UI组件 element ★13489 - 饿了么出品的Vue2的web UI工具套件 Vux ★8133 - 基于Vue和 ...
- Spring Security开发Restful服务
2-1开发环境安装 1.jdk8安装 2.安装STS Spring Tool Suite实际上就是一个eclipse,只不过在此基础上又安装了一些插件 3.安装mysql 2-2代码结构介绍 打 ...
- java生成简单验证码图片
概要 最近项目需要用java实现输出随机验证码图片到前台,正好有机会接触下java的绘图类,完成需求后也有时间做个总结,写篇随笔记录下也希望能帮助到有同样需求的人! 需求流程图 1.生成随机数 在ja ...
- QVector也是隐式数据共享的
Behind the scenes, QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid ...
- sentry的安装和使用以及各种问题处理
官方的git地址:https://github.com/getsentry/onpremise 需要先安装docker 1.10版本以上 假设你已经安装完docker,那么接下来 安装docker-c ...
- request.getRealPath为什么会被代替
以及前两天在网上看到的“不是工程的物理路径封装在Session里 是工程的路径被封装在了ServletContext中的问题” 很抱歉没有找到答案. 只能怪鄙人才识短浅. 在通过这次学习的过程中使我懂 ...