Python呼叫OpenCV畫素操作

2021-09-26 22:44:40 字數 2700 閱讀 2448

python呼叫opencv進行操作的時候基本上感覺就是對numpy進行操作,跟numpy是挺相關的。

opencv獲取影象(x,y)處的畫素值:

px=img[x,y]
當影象是三通道的時候返回的是bgr三通道的值,如果是灰度圖的話就返回乙個亮度值

同樣的如果要對影象(x,y)處賦值的話,也通過這種方式來實現:

#三通道

img[x,y]=[255,255,255]

#單通道

img[x,y]=255

獲取影象的形式,這個跟numpy的操作基本一樣,通過shape來獲取:

img.shape
會返回乙個影象的形態,也就是(行,列,通道),opencv的影象還有乙個size屬性,這個返回的是總的畫素數量行*列*通道數。

通過影象的dtype來獲取影象的畫素資料型別:

img.dtype
返回的值型別如uint8等

opencv獲取影象的roi的時候可以使用類似numpy的方式來獲取,如:

roi=img[r0:r1,c0:c1]
通道分離使用的是函式split:

b,g,r=cv2.split(img)
通道分離用的是merge函式:

img=cv2.merge(b,g,r)
當可以不用split的時候就不要用,改用numpy的索引操作,因為split是比較耗時的操作。

擴充邊界的時候就用函式copymakeborder(),這個函式有四個引數:

src:輸入影象

top,bottom,left,right:對應的邊界的畫素數目

bordertype要新增哪種型別的邊界

cv2.border_constant,新增有顏色的常數值邊界,也就是下乙個引數value;

cv2.border_reflect,邊界顏色的映象,fedcba|abcdefgh|hgfedcb;

cv2.border_reflect_101或者cv2.border_default,gfedcb|abcdefgh|gfedcba;

cv2.border_replicate,重複最後乙個畫素來填充;

cv2.border_wrap,這個比較...,應該是左移右移來填充吧,cdefgh| abcdefgh|abcdefg

value:邊界顏色

天還未黑,雲怎敢灰;雨還未下,風怎敢吹;瓜還未熟,秧怎敢枯;花還未落,樹怎敢死;你還未嫁,我怎敢老。

-- 汪國真 《怎敢》

Python呼叫OpenCV幾何變換

這一篇就記錄三個 影象縮放 平移和映象。影象縮放用到的函式是cv2.resize 函式,函式原型如下 resize src,dsize,dst none,fx none,fy none,interpolation none opencv提供了幾種縮放方式 cv2.inter area cv2.int...

Python呼叫OpenCV閾值化

這一篇主要有兩點 普通閾值化和自適應閾值化。普通閾值化用到的函式是cv2.threshold,其函式原型為 threshold src,thresh,maxval,type,dst none 其中,type的取值有以下幾種cv2.thresh binary cv2.thresh binary inv...

呼叫OpenCV靜態庫

呼叫靜態庫的好處在於,發布軟體時不需要附帶dll,只需要乙個.exe,但是檔案的體積會比較大。呼叫方法 1 設定專案屬性的目錄,可執行目錄 opencv build x86 vc11 bin,包含目錄opencv build include,庫目錄opencv build x86 vc11 stat...