計算機視覺OpenCV之核心操作1

2021-10-08 18:30:34 字數 4496 閱讀 9609

1 修改並獲取畫素值

)2 獲取影象屬性

img.shape #影象形狀

img.size #畫素數目

img.dtype #影象的資料型別

3 影象roi

拷貝影象的某部分區域到另一部分

ball = img[

280:

340,

330:

390]

img[

273:

333,

100:

160]

= ball

拆分並合併影象通道

b, g, r = cv2.split(img)

#或者b=img[:,:,0]

img = cv2.merge(

[b, g, r]

)

為影象擴邊: cv2.copymakeborder()

使用 cv2.copymakeborder()函式。這經常在卷積運算或 0 填充時被用到。這個函式包括如下引數:

• src 輸入影象

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

• bordertype 要新增那種型別的邊界,型別如下

– cv2.border_constant 新增有顏色的常數值邊界,還需要

下乙個引數(value)。

– cv2.border_reflect 邊界元素的映象。比如: fedcba|abcdefgh|hgfedcb

– cv2.border_reflect_101 or cv2.border_default

跟上面一樣,但稍作改動。例如: gfedcb|abcdefgh|gfedcba

– cv2.border_replicate 重複最後乙個元素。例如: aaaaaa|

abcdefgh|hhhhhhh

– cv2.border_wrap 不知道怎麼說了, 就像這樣: cdefgh|

abcdefgh|abcdefg

• value 邊界顏色,如果邊界的型別是 cv2.border_constant

blue=

[255,0

,0]replicate = cv2.copymakeborder(img1,10,

10,10,

10,cv2.border_replicate)

reflect = cv2.copymakeborder(img1,10,

10,10,

10,cv2.border_reflect)

reflect101 = cv2.copymakeborder(img1,10,

10,10,

10,cv2.border_reflect_101)

wrap = cv2.copymakeborder(img1,10,

10,10,

10,cv2.border_wrap)

constant= cv2.copymakeborder(img1,10,

10,10,

10,cv2.border_constant,value=blue)

plt.subplot(

231)

,plt.imshow(img1,

'gray'

),plt.title(

'original'

)plt.subplot(

232)

,plt.imshow(replicate,

'gray'

),plt.title(

'replicate'

)plt.subplot(

233)

,plt.imshow(reflect,

'gray'

),plt.title(

'reflect'

)plt.subplot(

234)

,plt.imshow(reflect101,

'gray'

),plt.title(

'reflect_101'

)plt.subplot(

235)

,plt.imshow(wrap,

'gray'

),plt.title(

'wrap'

)plt.subplot(

236)

,plt.imshow(constant,

'gray'

),plt.title(

'constant'

)plt.show(

)

4 影象上的運算cv2.add(x,y)

影象加法

x = np.uint8(

[250])

y = np.uint8([10

])print

(cv2.add(x,y)

)#250+10 = 260 => 255

print

(x+y)

#250+10 = 260 % 256 = 4

**影象混合cv2.addweighted() **

不同的是兩幅影象的權重不同,這就會給人一種混合或者透明的感覺。影象混合的計算公式如下:g (x) = (1 − α) f0 (x) + αf1 (x)通過修改 α 的值(0 -1),可以實現非常酷的混合dst = α · img1 + β · img2 + γ。

dst = cv2.addweighted(img,

0.7, img1,

0.3,0)

im_show(

'dst'

, dst)

按位運算

按位操作有: and, or, not, xor 等。

, img)5 程式效能檢測及優化

• 檢測程式的效率

• 一些能夠提高程式效率的技巧

使用 opencv 檢測程式效率

cv2.gettickcount 函式返回從參考點到這個函式被執行的時鐘數。所

以當你在乙個函式執行前後都呼叫它的話,你就會得到這個函式的執行時間

(時鐘數)。

cv2.gettickfrequency 返回時鐘頻率,或者說每秒鐘的時鐘數。所以

你可以按照下面的方式得到乙個函式執行了多少秒:

e1 = cv2.gettickcount(

)# your code execution

e2 = cv2.gettickcount(

)time =

(e2 - e1)

/ cv2.gettickfrequency(

)

opencv 中的預設優化

使用函式 cv2.useoptimized()來檢視優化是否被開啟了,使用函式 cv2.setuseoptimized() 來開啟優化。

OpenCV 計算機視覺庫

opencv是乙個由因特爾公司支援的開源機器視覺庫,關於它的介紹,網上隨便一搜就車載斗量。這裡我不談視覺庫的主要內容,而是將這段時間來對它的使用心得作個簡單介紹,以啟發打算用這個庫的朋友的思路,與大家一起來分享。在學校的時候,雖然是影象處理研究方向,但真正具體的應用到影象的很多東西,還是在參加工作以...

計算機視覺 opencv人臉識別

import cv2 步驟1 載入影象 gray cv2.cvtcolor img cv2.color bgr2gray 將影象轉換成灰度模式 opencv載入影象的方式是bgr cv2.imshow test gray cv2.waitkey 0 為什麼不直接在載入影象的時候指定灰度影象?而是要轉...

計算機視覺OpenCV傅利葉變換

傅利葉變換的作用 高頻 變化劇烈的灰度分量。例如邊界。低頻 變化緩慢的灰度分量,例如大海。低通濾波器 只保留低頻,會使得影象模糊 高通濾波器 只保留高頻,會使得影象細節增強 cv2.dft img,cv2.dft complex output 進行傅利葉變化 引數說明 img表示輸入的,cv2.df...