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 上的这个问 ...
随机推荐
- 【BZOJ 2118】墨墨的等式
http://www.lydsy.com/JudgeOnline/problem.php?id=2118 最短路就是为了找到最小的$x$满足$x=k×a_{min}+d,0≤d<a_{min}$ ...
- 【POJ 1743】Musical Theme
后缀数组求了height,模板题啦啦啦 #include<cstdio> #include<cstring> #include<algorithm> using n ...
- CDN 备胎技巧
如果你使用 CDN 服务,建议准备一个备胎,万一 CDN 服务挂了,可以从自己的服务器上读取: <script src="http://cdn.staticfile.org/jquer ...
- The prefix "tx" for element "tx:annotation-driven " is not bound
The prefix "tx" for element "tx:advice" is not bound 这个错误的原因很简单是: 我们在定义申明AOP的时候. ...
- Python 编辑器 tips
1. IDLE界面美化 注意IDLE是可以设置语法高亮的:(美化参考 http://www.linuxidc.com/Linux/2012-07/66129.htm) windows 用户,直接打开 ...
- BZOJ 1115: [POI2009]石子游戏Kam
1115: [POI2009]石子游戏Kam Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 883 Solved: 545[Submit][Stat ...
- [模板]tarjan求强连通分量
大约是今年4月学的算法了,后来5月的时候做题还写了一个退化的tarjanQAQ. 时间复杂度:O(n+m) 用途:有向图缩环 #include<set> #include<cmath ...
- 【BZOJ-3252】攻略 DFS序 + 线段树 + 贪心
3252: 攻略 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 339 Solved: 130[Submit][Status][Discuss] D ...
- macOS 安装 pip
安装好wget之后: wget https://bootstrap.pypa.io/get-pip.py sudo python get-pip.py 终于可以愉快的pip了~
- Linux 输出重定向>和>>的区别
>是定向输出到文件,如果文件不存在,就创建文件:如果文件存在,就将其清空:一般我们备份清理日志文件的时候,就是这种方法:先备份日志,再用`>`,将日志文件清空(文件大小变成0字节): &g ...