這些相當於我的學習筆記,所以並沒有很強的結構性和很全的介紹,請見諒。
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]])
| 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]])
