1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > python opencv二值化图像_python opencv 读取彩色图像 提取三通道 图像二值化 提取图像的边缘...

python opencv二值化图像_python opencv 读取彩色图像 提取三通道 图像二值化 提取图像的边缘...

时间:2021-09-13 13:40:31

相关推荐

python opencv二值化图像_python opencv 读取彩色图像 提取三通道 图像二值化 提取图像的边缘...

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)

通道0

通道1

通道2

总结:

1个彩色图像,可以分解为3个灰度图像

3个灰度图像合起来是一个彩色图像

通道2图像,观察到花很白。如果

图像很白,说明对应的像素值大。

所以,做一个二值处理。

当像素值大于180,显示255

当像素值小于等于180,显示为0

created[created>180]=255

created[created<=180]=0

这个图像就是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

现在图像里面,只有一些白色的线条。

白色的面积小了很多了。

而且这些白色线条,组成了花的轮廓。

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

读者可以更换其他图像试试,看看效果

总结:

对图像处理的步骤

1,彩色图像

2,提取3个通道

3,把第三通道的图像做二值化,阈值自己可以调整的

4,把二值化图像,提取了边缘

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。