1. 程式人生 > >opencv3.4+python3.6 中文教程6之畫素操作

opencv3.4+python3.6 中文教程6之畫素操作

目標
畫素顏色值的獲取及變更
影象特徵
RIO興趣區域
分割與融合
畫素獲取及變更

import numpy as np
import cv2 as cv
img = cv.imread(‘sample.jpg’) #讀入圖片
px = img[100,100] #座標位置畫素點的顏色
print( px )
[157 166 200] #opencv中通道順序為BGR
blue = img[100,100,0] #只讀取“B”(blue)通道的數值
print( blue )
157
同樣的方法可以實現座標點畫素值的改變:
img[100,100] = [255,255,255]
print( img[100,100] )
[255 255 255]
上述方法直接訪問影象點陣中的畫素值,速度會非常的慢,並不是推薦的最優方法,通常會用array.item方法來實現同樣的功能。
# 得到畫素值


img.item(10,10,2)
59
# 改變畫素值
img.itemset((10,10,2),100)
img.item(10,10,2)
100
影象大小
print( img.shape )
(342, 548, 3)
如果圖片為彩色圖片,img.shape返回(h,w,channel)
我們通常會用:h,w=img.shape[::2]來得到圖片的尺寸大小。
如果圖片為灰度圖,則只返回h,w。這也是判別圖片是否為彩色圖片的一個方法。
畫素總數量

print( img.size )
562248
影象型別
print( img.dtype )
uint8
RIO興趣區域
ball = img[280:340, 330:390] #獲取[row1:row2,col1:col2]區域內的影象
img[273:333, 100:160] = ball #給[row1:row2,col1:col2]區域內的影象重新賦值
效果如下:
這裡寫圖片描述

畫素通道分割與融合

b,g,r = cv.split(img) #將各通道顏色分割開來
img = cv.merge((b,g,r)) #融合為一個新的影象
或者:
b = img[:,:,0] #單獨得到b通道數值
img[:,:,2] = 0 #將red通道顏色全部置為0
cv.split函式非常耗時,除非必用不可。請儘量使用numpy函式來實現功能。