圖像基本操作
圖像像素級處理
opencv
- 讀取像素
- 返回值 = 圖像(位置參數)
- 灰度圖像:返回灰度值——
p=img[88, 142]
——print(p)
- RGB圖像:返回
B
、G
、R
的值blue=img[78, 125, 0]
——print(blue)
green=img[78, 125, 1]
——print(green)
red=img[78, 125, 2]
——print(red)
p=img[78, 125]
——print(p)
——三個值
- 修改像素
- 灰度圖像:
img[88, 99]=255
- RGB圖像:
img[88, 99, 0]=255
img[88, 99, 1]=255
img[88, 99, 2]=255
img[88, 99]=[255,255,255]
- 灰度圖像:
numpy
- 讀取像素
- 返回值 = 圖像.item(位置參數)
- 灰度圖像:返回灰度值——
p=img.item(88, 142)
——print(p)
- RGB圖像:返回
B
、G
、R
的值blue=img.item(78, 125, 0)
——print(blue)
green=img.item(78, 125, 1)
——print(green)
red=img.item(78, 125, 2)
——print(red)
p=img.item(78, 125)
——print(p)
——三個值
- 修改像素值
- 圖像名.itemset(位置, 新值)
- 灰度圖像:
img.itemset((88, 99), 255)
- RGB圖像:
img.itemset((88, 99, 0), 255)
img.itemset((88, 99, 1), 255)
img.itemset((88, 99, 2), 255)
獲取圖像屬性
- 形狀:行、列、通道數
shape
可以獲取圖像的形狀,返回包含行數、列數、通道數的元組- 灰度:返回行數、列數——
img.shape
——(512, 512)
- 彩度:返回行數、列數、通道數——
img.shape
——(512, 512, 3)
- 像素數目
size
可以獲取圖像的像素數目- 灰度:返回 行數*列數——
img.size
- 彩度:返回 行數*列數*通道數
- 圖像的數據類型
dtype
返回的是圖像的數據類型- 例:
img.dtype
——uint8
圖像ROI
- ROI (region of interest),感興趣區域
- 從被處理的圖像以方框、圓、橢圓、不規則多邊形等方式勾勒出需要處理的區域
- 可以通過各種算子(Operator)和函數來求得感興趣區域ROI,並進行圖像的下一步處理
face=a[220:400, 250:350]
——感興趣區域——可以複製什麼的
圖像通道操作
- 拆分通道
import cv2
img = cv2.imread('lena.png')
## 方式一
b = img[:, :, 0]
g = img[:, :, 1]
r = img[:, :, 2]
## 方式二
b, g, r = cv2.split(img)
## 方式三
b = cv2.split(a)[0]
g = cv2.split(a)[1]
r = cv2.split(a)[2]
- 合併通道:
cv2.merge([b,g,r])
- 注意順序
圖像運算
加法運算
Numpy
- 取模加法——運算方式:結果=圖像1+圖像2
- 超過255:
%255
- 超過255:
OpenCV
- 飽和運算——運算方式:結果=cv2.add(圖像1,圖像2)
- 超過255:
255
- 超過255:
注意:
- 參與運算的圖像大小、類型必須一致
- vs加法運算:有權重
- 函數
addWeighted
:cv2.addWeighted(src1, alpha, src2, beta, gamma)
src1
:圖像1alpha
:圖像1權重src2
:圖象2beta
:圖像2權重gamma
:亮度調節值——不能省略——不想調,設0
- 例:
cv2.addWeighted(img1, 0.3, img2, 0.6, 0)
圖像融合
- 將2張或2張以上的圖像信息的融合到1張圖像上
- 融合的圖像含有更多的信息、能夠更方便人來觀察或計算機處理
幾何變換
圖像縮放
- 函數
resize
- 格式:
dst = cv2.resize(src, dsize[, dst[ ,fx[ ,fy[ ,interpolation]]]])
src
:原始圖像dsize
:縮放大小- 例:
cv2.resize(a, (122, 123))
:縮放成122列,123行
- 例:
fx, fy
:縮放大小- 例:
cv2.resize(a, None, fx=0.5, fy=0.7)
- 例:
圖像翻轉
- 函數
flip
- 格式:
dst = cv2.flip(src, flipCode)
src
:原始圖像flipCode
=0
:以X軸爲對稱軸翻轉>0
:以Y軸爲對稱軸翻轉<0
:以X軸、Y軸方向同時翻轉