您當前的位置:首頁 > 文化

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

作者:由 草頭黃 發表于 文化時間:2020-04-19

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

python opencv

1,讀取影象

2,影象變矩陣

3,影象轉灰度影象

4,彩色影象是3D陣列

5,灰度影象是2D陣列

6,彩色影象是3個2D陣列

7,彩色影象有3個通道,提取3個通道

#Copyright

‘’‘

熟悉opencv庫

’‘’

import

cv2

import

numpy

as

np

img

=

cv2

imread

‘D:/python_examples/mei_hua1。jpeg’

‘’‘顯示彩色影象 ’‘’

#cv2。imshow(“img”,img)

#cv2。waitKey(0)

gray

=

cv2

cvtColor

img

cv2

COLOR_BGR2GRAY

‘’‘ 顯示灰度影象’‘’

#cv2。imshow(“gray”,gray)

#cv2。waitKey(0)

‘’‘得到了影象的大小 ’‘’

rows

cols

_

=

img

shape

print

rows

cols

‘’‘初始化一個大小一樣的影象,元素初始化為0 ’‘’

created

=

np

zeros

((

rows

cols

))

‘’‘ for in 語句,遍歷陣列,但不能修改陣列’‘’

for

i

in

img

for

j

in

i

#print(j)

pass

‘’‘給陣列賦值 ’‘’

for

i

in

range

0

rows

):

for

j

in

range

0

cols

):

created

i

j

=

img

i

j

2

#第三個引數,可以是0,1,2分別表示3個通道

print

created

shape

#建立的影象大小

‘’‘必須加這一條語句,否則無法正確顯示影象 ’‘’

created

=

created

astype

np

uint8

#轉換型別,才能正確的顯示影象

cv2

imshow

‘created’

created

cv2

imwrite

‘D:/python_examples/created。jpg’

created

cv2

waitKey

0

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

通道0

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

通道1

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

通道2

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

總結:

1個彩色影象,可以分解為3個灰度影象

3個灰度影象合起來是一個彩色影象

通道2影象,觀察到花很白。如果

影象很白,說明對應的畫素值大。

所以,做一個二值處理。

當畫素值大於180,顯示255

當畫素值小於等於180,顯示為0

created[created>180]=255

created[created<=180]=0

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

這個影象就是2值影象。

什麼是2值影象,就是裡面只有黑和白。

通道3變成了2值影象以後,有什麼變化。

在通道3,

看到有花,有枝條,有朦朧的一個背景。

在二值影象,

就看到了花。

花尾巴部分,變成了白色,原來是灰色。

枝條沒有了。

朦朧的背景也沒有了

所以,二值影象,消除了枝條。

消除了朦朧的背景。

只顯示了我們關心的花。

仔細觀察影象變化,很重要!

對於二值影象,顯示邊緣。

什麼是邊緣。

舉例:

000011100

左邊連續的0,都是黑

所以0-0=0

右邊-左邊

01

左邊是0,右邊是1

這裡就是邊緣了

右邊-左邊=1

111連續的1,都是白色

10

這裡是邊緣,因為從1變0

00

都是黑

按照這個道理。

修改二值影象,提取邊緣

for i in range(0,rows):

for j in range(0,cols-1):

#created[i,j]=created[i,j+1]-created[i,j]# 0-0 255-255 255-0 0-255

if(created[i,j+1]<=created[i,j]):

created[i,j]=0

else:

created[i,j]=255

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

現在影象裡面,只有一些白色的線條。

白色的面積小了很多了。

而且這些白色線條,組成了花的輪廓。

for

i

in

range

0

rows

):

for

j

in

range

0

cols

-

1

):

#created[i,j]=created[i,j+1]-created[i,j]# 0-0 255-255 255-0 0-255

if

created

i

j

+

1

>=

created

i

j

]):

created

i

j

=

0

else

created

i

j

=

255

python opencv,讀取彩色影象,提取三通道,影象二值化,提取影象的邊緣

讀者可以更換其他影象試試,看看效果

總結:

對影象處理的步驟

1,彩色影象

2,提取3個通道

3,把第三通道的影象做二值化,閾值自己可以調整的

4,把二值化影象,提取了邊緣

標簽: created  影象  cv2  255  彩色影象