首页 > 代码库 > Python + OpenCV2 系列:2 - 图片操作
Python + OpenCV2 系列:2 - 图片操作
这些相当于我的学习笔记,所以并没有很强的结构性和很全的介绍,请见谅。
1 读取、写入图像
下面是一个简短的载入图像、打印尺寸、转换格式及保存图像为.png的例子:
# -*- coding: utf-8 -*-import cv2import 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之后可以添加参数
# 注:这里是相对路径: \与/是没有区别的,‘’ 和 “” 是没有区别的。 ../表示返回到上一级目录下,./表示与该源码文件同一级目录下。
# 注:函数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,bb,g,r = cv2.split(im)# Convert BGR to HSVimage_hue_saturation_value =http://www.mamicode.com/ cv2.cvtColor(im, cv2.COLOR_BGR2HSV)h,s,v=cv2.split(image_hue_saturation_value)# Convert BGR to grayimage_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 - 图片操作