python将灰度图像二值化,图像的二值化处理matlab
欢迎来到“hxdmjpython”,发现更多“有趣”
在本文中,您将学习如何使用NumPy对图像进行二值化。当然,OpenCV用于读取灰度和RGB格式的图像。
要理解二进制是什么,二进制是由两个东西组成的。在计算机术语中,二进制文件只有0和1。如果我们用图片来连接同样的东西,那么在黑白图片中:
0表示黑色。
1表示白色。
在学习图像处理的初级阶段,我们认为灰度图像就是二值图像。虽然不是。但是慢慢的,当我们开始谈论这个话题的时候,我才意识到我们错了多少。然后,你将学习如何使用和不使用库。NumPy用于矩阵运算,但是使用循环规则将防止程序变慢。)。它还使用Matplotlib来绘制结果。
RGB 和灰度概述
在灰度图像中,二值化的效果非常好。彩色(RGB)图像的问题在于,每个像素是一个表示三个唯一值的向量:红色、绿色和蓝色。
典型的灰度图像矩阵如下所示。
数组([ 162,162,162,170,155,128],[162,162,155,128],[162,162,162,170] 55,104,105,170)
array ([ 226,137,125 ]、[ 200,99,90 ]、[ 226,137,125 ]、[ 200,99,90 ]、[ 226,137 ]).[ 177,62,79 ]、[ 82,22,57 ]、[ 185,74,81 ]、[ 82,22,57 ]、[ 185,74,81 ]、数据类型
R 矩阵
数组([ 226,226,223,230,221,200 ],[ 226,226,223,230,221,200 ],[ 226,226,223,].
array ([ 137,137,137,148,130,99 ],[ 137,137,137,137,137,137,137,137,99 ]).
数组([ 125,125,1 ])
33, 122, 110, 90], [125, 125, 133, 122, 110, 90], [125, 125, 133, 122, 110, 90], [ 60, 60, 58, 84, 76, 79], [ 57, 57, 62, 79, 81, 81], [57, 57, 62,79,81,81]],dtype=uint8)无论我们对灰度图像做什么,都需要对RGB图像做同样的计算,但是我们需要将R,G,B通道分离3次,最后合并成一个正确的。
编程时间
我们使用的主要软件库有:
NumPy
Matplotlib
开放计算机视觉
导入软件库
将numpy作为npimport从matplotlib导入JSON将pyplot作为plt读取图片导入
def read_this(image_file,gray _ scale=False):image _ src=cv2 . im read(image _ file)if gray _ scale:image _ src=cv2 . CVT color(image _ src,2 .color _ bgr 2 gray)else:image _ src=cv2。cvtcolor (image _ src,cv2。color _ bgr2rgb) return image _ src上述函数读取灰度或rgb的图像,并返回图像矩阵。
实现代码
为了将图像转换成二值图像,我们可以简单地使用cv2库中提供的threshold()方法。这样不管图像是什么(灰度还是RGB)都转换成二进制。使用时需要四个参数。
Src:它基本上是一个图像矩阵。
Thresh: threshold,根据该值为像素赋予新值。如果像素小于这个值,我们会将这些像素重新赋值为255;否则,像素将被重置为0。
Maxval:图像可以包含的最大像素值(255)
类型:给定的阈值类型,根据该类型计算运算。
之后,我们将在下面的函数中绘制结果以查看变化。
def binary ize _ lib(image _ file,thresh_val=127,with_plot=False,gray _ scale=False):image _ src=read _ this(image _ file=image _ file,gray_scale=gray_scale) th,image _ b=cv2 . threshold(src=image _ src,thresh=thresh_val,maxval=255,type=cv2。THRESH _ BINARY)if with _ plot:Cmap _ val=None if not gray _ scale else gray fig,(ax1,ax2)=plt.subplots(nrows=1,ncols=2,figsize=(10,20))ax1 . axis( off )ax1 . title . set _ text( Original )ax2 . title . set _ text( off )ax1 . im show(image _ src,Cmap=cmap _ val) ax2.imshow (image
binary ize _ lib(image _ file= Lena _ original。png ,with_plot=True)
binary ize _ lib(image _ file= Lena _ original。png ,with_plot=True,gray_scale=True)
现在我们已经看到了原始图像和二进制图像的结果,很明显,使用库中提供的函数编写的代码对这两者都适用。是时候让我们从头开始编写如何使用NumPy对图像进行二值化。
从零开始的代码实现
首先,我们将编写一个函数,将小于指定阈值的像素值重新赋值为255。
通过这样做,我们可以看到下面这样的东西:
def convert_binary(image_matrix,thresh _ val):白色=255黑色=0 initial_conv=NP。其中((image_matrix=thresh _ val),image_matrix,white)final _ conv=NP。其中((initial _ conv thresh _ val),initial _ conv,黑)return final_conv我们将上面的函数通过分离r、g和b值进行三次调用,最后将它们合并得到二值化图像。一旦这样做,我们就可以像以前那样绘制结果。
def binary size _ this(image _ file,thresh_val=127,with_plot=False,gray _ scale=False):image _ src=read _ this(image _ file=image _ file,gray_scale=gray_scale)如果不是gray_scale: cmap_val=None r_img,g_img,b_img=image_src[:1],image_src[:2]r _ b=convert _ binary(image _ matrix我们只是使用NumPy创建了我们的二进制化代码:
二进制化_ this(image _ file= Lena _ original。png ,with_plot=True)
二进制化_ this(image _ file= Lena _ original。png ,with_plot=True,gray_scale=True)
至此,我们发现使用NumPy从零编写的结果与我们调用库函数编写的代码得到的结果非常相似。
END
快乐生活
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。