Python + OpenCV2 系列:2 - 图片操作
这些相当于我的学习笔记,所以并没有很强的结构性和很全的介绍,请见谅。
1. 读取/写入图像
下面是一个简短的载入图像、打印尺寸、转换格式及保存图像为.png的例子:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
# 读入图像
im = cv2.imread('../data/empire.jpg') # 打印图像尺寸
h, w = im.shape[:2]
print h, w # 保存原jpg格式的图像为png格式图像
cv2.imwrite('../images/ch10/ch10_P210_Reading-and-Writing-Images.png',im)
# 注:imread默认读取的是RGB格式,所以即使原图像是灰度图,读出来仍然是三个通道,所以,在imread之后可以添加参数
# 注:这里是相对路径: \与/是没有区别的,‘’ 和 “” 是没有区别的。 ../表示返回到上一级目录下,./表示与该源码文件同一级目录下。
"\"这种斜杠使用需要用转义字符,即"\\"表示单“\”。而“/” 不需要转义字符,即单个斜杠就可以了。所以在使用时,形式如下:
im = cv2.imread('../data/empire.jpg')
im = cv2.imread('..\\data\\empire.jpg')
# 注:函数imread()将图像返回为一个标准的NumPy数组。
1.1 相关注释
cv2.imread
Python: cv2.imread(filename[, flags])
| Parameters: |
|
|---|
cv2.imwrite
Python: cv2.imwrite(filename, img[, params])
| Parameters: |
|
|---|
2.图像RGB/HSV 通道分离
# Convert BGR to r,g,b
b,g,r = cv2.split(im) # Convert BGR to HSV
image_hue_saturation_value = cv2.cvtColor(im, cv2.COLOR_BGR2HSV)
h,s,v=cv2.split(image_hue_saturation_value) # Convert BGR to gray
image_gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
# 注:RGB channels is indexed in B G R which is different from matlab。
# 注:Any channels could be split using cv2.split, pay attention to the sequence of channels
2.1 相关注释
Python: cv2.split(m[, mv]) → mv
| Parameters: |
|
|---|
Python: cv2.cvtColor(src, code[, dst[, dstCn]]) → dst
| Parameters: |
|
|---|
3.图像矩阵的操作(点乘,复制,截取,1到N维矩阵)
# mask seed 3D matrix
seed_mask_single_channel_list = np.array([[[1,0,0],[0,0,0],[0,0,0]],[[0,1,0],[0,0,0],[0,0,0]],[[0,0,1],[0,0,0],[0,0,0]],
[[0,0,0],[1,0,0],[0,0,0]],[[0,0,0],[0,1,0],[0,0,0]],[[0,0,0],[0,0,1],[0,0,0]],
[[0,0,0],[0,0,0],[1,0,0]],[[0,0,0],[0,0,0],[0,1,0]],[[0,0,0],[0,0,0],[0,0,1]]])
# cut image
image_new_sample = image_source[:200,:200] #取前200个行和列的元素,python是从0开始的,所以0:200表示的是0-199这200个元素,取不到200.而初始位置0可以省略 #separate channel
mask_singel_channel = np.tile(seed_mask_single_channel_list[1],(70,70))[:200,:200] #第一个3*3的mask作为一个单元进行复制成为70行,70列,截取前200行,200列
single_channel_image = mask_singel_channel * image_new_sample #表示点乘
# 注:矩阵的操作用Numpy这个类库进行。
3.1 相关注释
numpy.array(object, dtype=None, copy=True, order=None, subok=False, ndmin=0)
| Parameters: |
object : array_like
dtype : data-type, optional
copy : bool, optional
order : {‘C’, ‘F’, ‘A’}, optional
subok : bool, optional
ndmin : int, optional
|
|---|---|
| Returns: |
out : ndarray
|
e.g. 最外层始终都是[],所以如果是1维就一个[],2维就2个,N维就N个
>>> np.array([1, 2, 3])
array([1, 2, 3])
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])
>>> np.array([1, 2, 3], ndmin=2)
array([[1, 2, 3]])
numpy.tile(A, reps)
| Parameters: |
A : array_like
reps : array_like
|
|---|---|
| Returns: |
c : ndarray
|
e.g.
>>> b = np.array([[1, 2], [3, 4]])
>>> np.tile(b, 2)
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
>>> np.tile(b, (2, 1))
array([[1, 2],
[3, 4],
[1, 2],
[3, 4]])
Python + OpenCV2 系列:2 - 图片操作的更多相关文章
- Python + OpenCV2 系列:1 - 配置
Python+OpenCV2+Eclipse+Windos 8.1(32bits): 最初的目的是做图像处理,opencv强大的社区支持,让我想从matlab转到opencv框架下进行试验,而Pyth ...
- Python语言系列-03-文件操作和函数
## 深浅拷贝 #!/usr/bin/env python3 # author:Alnk(李成果) # 赋值运算 # 可变的数据类型:由于数据类型可变,修改数据会在原来的数据的基础上进行修改, # 可 ...
- Python + OpenCV2 系列:3 - python 字符串,类,编码规范
首先,强烈推荐<<简明 Python 教程>> Swaroop, C. H. 著 沈洁元 译 其实,这本书里已经把python的最基本的用法,编码等等介绍的很好,这里把我用到的 ...
- [js高手之路] html5 canvas系列教程 - 图片操作(drawImage,clip,createPattern)
接着上文[js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)继续,本文介绍的 ...
- Python学习系列之文件操作
Pyhton文件打开方式 with= open('文件路径','打开模式') as f:#PS:python3提供了with语句来帮我们自动调用close方法,所以说无论打开文件是否出错都能自动正确的 ...
- media静态文件统一管理 操作内存的流 - StringIO | BytesIO PIL:python图片操作库 前端解析二进制流图片(了解) Admin自动化数据管理界面
一.media ''' 1. 将用户上传的所有静态文件统一管理 -- settings.py -- MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 2. 服务 ...
- Python学习系列(五)(文件操作及其字典)
Python学习系列(五)(文件操作及其字典) Python学习系列(四)(列表及其函数) 一.文件操作 1,读文件 在以'r'读模式打开文件以后可以调用read函数一次性将文件内容全部读出 ...
- Python系列之文件操作、冒泡算法、装饰器、及递归
文件处理 python对文件进行读写操作的方法与具体步骤,包括打开文件.读取内容.写入文件.文件中的内容定位.及关闭文件释放资源等 open().file(),这个两函数提供了初始化输入\输出(I\O ...
- 用 Python 和 OpenCV 检测图片上的条形码
用 Python 和 OpenCV 检测图片上的的条形码 这篇博文的目的是应用计算机视觉和图像处理技术,展示一个条形码检测的基本实现.我所实现的算法本质上基于StackOverflow 上的这个问 ...
随机推荐
- Android怎么使用字体图标 自定义FontTextView字体图标控件-- 使用方法
首先我想说明一下字体图标的好处,最大的好处就是自适应了,而且是使用TextView 不用去切图,是矢量图 灵活调用 第一步我要说明一下一般字体图标的来源,我这里使用的是 --阿里巴巴矢量图标库 -网 ...
- Shell命令_for
chmod 755 demo.sh ./demo.sh 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- 【HDU 1007】Quoit Design
http://acm.hdu.edu.cn/showproblem.php?pid=1007 最近欧式距离模板题. 用分治大法(分治的函数名用cdq纯属个人习惯_(:з」∠)_) 一开始狂M. 后来判 ...
- 【POJ 2653】Pick-up sticks 判断线段相交
一定要注意位运算的优先级!!!我被这个卡了好久 判断线段相交模板题. 叉积,点积,规范相交,非规范相交的简单模板 用了“链表”优化之后还是$O(n^2)$的暴力,可是为什么能过$10^5$的数据? # ...
- SQL复习
1.select SELECT LastName,FirstName FROM Persons SELECT * FROM Persons 2.distinct SELECT DISTINCT Com ...
- swift 学习(三)(面向对象基础)
面向对象的基本特征包括:封装,继承,多态 在swift中,类,结构,枚举都具有面向对象特性 但结构和枚举的实例不称为对象,因为结构和枚举不是彻底的面向对象类型,比如他们不能继承. 结构体 struct ...
- 安装centos虚拟机
启动虚拟机提示"无法连接虚拟设备ide1:0,主机上没有相对应的设备" 进入编辑虚拟机设置--选中硬盘--点高级--在 虚拟机设备节点中选ide0:0接行了.
- 【深入Java虚拟机】之一:Java内存模型与内存溢出
[深入Java虚拟机]之:Java内存区域与内存溢出 高速缓存模型如下: ----------------------------------------------------分割线-------- ...
- C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看
数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...
- shell截取字符串的方法
参考文献: linux中shell截取字符串方法总结 [Linux]如何在Shell脚本中计算字符串长度? 截取字符串的方法一共有八种,主要为以下方法 shell中截取字符串的方法有很多中, ${ex ...