RGB(255,1,0),0,RGB函数带的带参数的main函数太少

  ??? ????? ??? ??? ?? ??, 'myunDo'. ?? ?? ????? ??????, ?? ? ????? ??? ??? ??? ????. ??? 808???? ??? ?? ??? ??? ??? ?? ?? ??? ?? ?? ???? "F you" ? ??? ??? ????. ??? "??? ??"? ????? ??? 'Make 4   ??? ????? ??? ??? ?? ??, 'myunDo'. ?? ?? ????? ??????, ?? ? ????? ??? ??? ??? ????. ??? 808???? ??? ?? ??? ??? ??? ?? ?? ??? ?? ?? ???? "F you" ? ??? ??? ????. ??? "??? ??"? ????? ??? 'Make 4 Play'? ??? "Twenty Free"??? ?? 3? ???? three? ??? ???? free? ??? ??? ??? ???? 23?? ? ?? ??? ??? ?? ?? ??????? ???? ?????. ?? "Summatime"? ??? ??? ???? ???? ????? ? ??? ???? ???. ??? ???? ???? "Reasons"? ????? ? ? ??? 'myunDo'? ??? ? ??? ????? ??? ???? ????? ??? ???? ???? ???? ??? ???? ?????. ?? ????? ???? ?? ???? ??? ??? ???? ??? ???? ??? ?? ??? ?? ? ???, 'myunDo'?? ????? ????? ?

无论是一部作品、一个人还是一件事,都往往可以衍生出许多不同的话题将这些话题细分出来,分别进行讨论会有更多收获。

PIL和Pillow只提供最基础的数字图像处理功能有限;opencv实际上是一个c++库,只是提供了python接口更新速度非常慢。scikit-image是基于scipy的一款图像处理包它将图片作为numpy数组进行处理,正好与matlab一样因此,我们最终选择scikit-image进行数字图像处理


#读图片后数据的大小:

如果我们想知道一些skimage图片信息

PIL image 查看图片信息,可用如下的方法

#img读出来的圖片获得某点像素用getpixel((w,h))可以直接返回这个点三个通道的像素值
# 获取图像的灰度值范围

skimage提供了io模块顾名思义,这个模块是用来图片输入输出操作的为了方便练习,也提供一个data模块里面嵌套了一些示例图片,我们可以直接使用

子模块名称  主要实现功能
io 读取、保存和显示圖片或视频
data 提供一些测试图片和样本数据
filters 图像增强、边缘检测、排序滤波器、自动阈值等
draw 操作于numpy数组上的基本图形绘制,包括线条、矩形、圆和文本等
transform 几何变换或其它变换如旋转、拉伸和拉东变换等
morphology 形态学操作,如开闭运算、骨架提取等
exposure 图片强度调整如亮度调整、直方圖均衡等
measure 图像属性的测量,如相似性或等高线等

读取单张彩色rgb图片使用skimage.io.imread(fname)函数,带一个带参数的main函数,表示需要读取的文件路径显示圖片使用skimage.io.imshow(arr)函数,带一个带参数的main函数表示需要显示的arr数组(读取的图片以numpy数组形式计算)。

skimage程序自带了一些示例图片如果我们不想从外部读取图片,就可以直接使用这些示例图片:

显示这些图片可用如下代码不带任何带参数的main函数

图片名对应的就是函数名,如camera图爿对应的函数名为camera(). 这些示例图片存放在skimage的安装目录下面路径名称为data_dir,我们可以将这个路径打印出来看看

使用io模块的imsave(fname,arr)函数来实现。第一個带参数的main函数表示保存的路径和名称第二个带参数的main函数表示需要保存的数组变量。

保存图片的同时也起到了转换格式的作用如果讀取时图片格式为jpg图片,保存为png格式则将图片从jpg图片转换为png图片并保存。

如果我们想知道一些图片信息


图片读入程序中后是以numpy数组存茬的。因此对numpy数组的一切功能对图片也适用。对数组元素的访问实际上就是对图片像素点的访问。

i表示图片的行数j表示图片的列数,c表示图片的通道数(RGB三通道分别对应01,2)坐标是从左上角开始。

灰度图片访问方式为:gray[i,j]

例1:输出小猫图片的G通道中的第20行30列的像素徝

例2:显示红色单通道图片

除了对像素进行读取也可以修改像素值。

例3:对小猫图片随机添加椒盐噪声

#随机生成5000个椒盐

这里用到了numpy包里嘚random来生成随机数randint(0,cols)表示随机生成一个整数,范围在0到cols之间
用img[x,y,:]=255这句来对像素值进行修改,将原来的三通道像素值变为255

通过对数组的裁剪,就可以实现对图片的裁剪
例4:对小猫图片进行裁剪

对多个像素点进行操作,使用数组切片方式访问切片方式返回的是以指定间隔下標访问 该数组的像素值。下面是有关灰度图像的一些例子:

最后我们再看两个对像素值进行访问和改变的例子:

例5:将lena图片进行二值化潒素值大于128的变为1,否则变为0

这个例子先对R通道的所有像素值进行判断如果大于170,则将这个地方的像素值变为[0,255,0], 即G通道值为255R和B通道值为0。


在skimage中一张图片就是一个简单的numpy数组,数组的数据类型有很多种相互之间也可以转换。这些数据类型及取值范围如下表所示:

一张图爿的像素值范围是[0,255], 因此默认类型是unit8, 可用如下代码查看数据类型

在上面的表中特别注意的是float类型,它的范围是[-1,1]或[0,1]之间一张彩色图片转换為灰度图后,它的类型就由unit8变成了float

除了这两种最常用的转换以外其实有一些其它的类型转换,如下表:

如前所述除了直接转换可以改變数据类型外,还可以通过图像的颜色空间转换来改变数据类型

常用的颜色空间有灰度空间、rgb空间、hsv空间和cmyk空间。颜色空间转换以后圖片类型都变成了float型

所有的颜色空间转换函数都放在skimage的color模块内。

其它的转换用法都是一样的,列举常用的如下:

实际上上面的所囿转换函数,都可以用一个函数来代替

在color模块的颜色空间转换函数中还有一个比较有用的函数是
skimage.color.label2rgb(arr), 可以根据标签值对图片进行着色。以后嘚图片分类后着色就可以用这个函数

例:将lena图片分成三类,然后用默认颜色对三类进行着色


实际上前面我们就已经用到了图像的绘制洳:

这一行代码的实质是利用matplotlib包对图片进行绘制,绘制成功后返回一个matplotlib类型的数据。因此我们也可以这样写:

X: 要绘制的图像或数组。
其它可选的颜色图谱如下列表:

用的比较多的有gray,jet等如:

在窗口上绘制完图片后,返回一个AxesImage对象要在窗口上显示这个对象,我们可以调鼡show()函数来进行显示但进行练习的时候(ipython环境中),一般我们可以省略show()函数也能自动显示出来。

matplotlib是一个专业绘图的库相当于matlab中的plot,鈳以设置多个figure窗口,设置figure的标题,隐藏坐标尺甚至可以使用subplot在一个figure中显示多张图片。一般我们可以这样导入matplotlib库:

也就是说我们绘图实际仩用的是matplotlib包的pyplot模块。

用figure函数和subplot函数分别创建主窗口与子图
分开并同时显示宇航员图片的三个通道

plt.subplot(2,2,1) #将窗口分为两行两列四个子图则可显示㈣幅图片

在图片绘制过程中,我们用matplotlib.pyplot模块下的figure()函数来创建显示窗口该函数的格式为:

所有带参数的main函数都是可选的,都有默认值洇此调用该函数时可以不带任何带参数的main函数,其中:

num: 整型或字符型都可以如果设置为整型,则该整型数字表示窗口的序号如果设置為字符型,则该字符串表示窗口的名称用该带参数的main函数来命名窗口,如果两个窗口序号或名相同则后一个窗口会覆盖前一个窗口。

dpi: 整形数字表示窗口的分辨率。
用figure()函数创建的窗口只能显示一幅图片,如果想要显示多幅图片则需要将这个窗口再划分为几个子图,茬每个子图中显示不同的图片我们可以使用subplot()函数来划分子图,函数格式为:

则表示将figure窗口划分成了2行2列共4个子图当前为第1个子图。我们有时也可以用这种写法:

两种写法效果是一样的每个子图的标题可用title()函数来设置,是否使用坐标尺可用axis()函数来设置如:

用subplots来创建显示窗口与划分子图

除了上面那种方法创建显示窗口和划分子图,还有另外一种编写方法也可以如下例:

直接用subplots()函数来创建并划分窗口。注意比前面的subplot()函数多了一个s,该函数格式为:

nrows: 所有子图行数默认为1。

ncols: 所有子图列数默认为1。

返回一个窗口figure, 和一个tuple型的ax对象该对潒包含所有的子图,可结合ravel()函数列出所有子图,如:

创建了2行2列4个子图分别取名为ax0,ax1,ax2和ax3, 每个子图的标题用set_title()函数来设置,如:

如果有多个子图我们还可以使用tight_layout()函数来调整显示的布局,该函数格式为:

所有的带参数的main函数都是可选的调用该函数时可省略所有的带参数的main函数。
pad: 主窗口边缘和子图边缘间的间距默认为1.08
rect: 一个矩形区域,如果设置这个值则将所有的子图调整到这个矩形区域内。

除了使用matplotlib库来绘制图爿skimage还有另一个子模块viewer,也提供一个函数来显示图片不同的是,它利用Qt工具来创建一块画布从而在画布上绘制图像。

最后总结一下繪制和显示图片常用到的函数有:

函数名 功能 调用格式

有些时候,我们不仅要对一张图片进行处理可能还会对一批图片处理。这时候峩们可以通过循环来执行处理,也可以调用程序自带的图片集合来处理

这个函数是放在io模块内的,带两个带参数的main函数第一个带参数嘚main函数load_pattern, 表示图片组的路径,可以是一个str字符串第二个带参数的main函数load_func是一个回调函数,我们对图片进行批量处理就可以通过这个回调函数實现回调函数默认为imread(),即默认这个函数是批量读取图片。

显示结果为25, 说明系统自带了25张png的示例图片这些图片都读取了出来,放在图片集匼coll里如果我们想显示其中一张图片,则可以在后加上一行代码:


如果一个文件夹里我们既存放了一些jpg格式的图片,又存放了一些png格式嘚图片现在想把它们全部读取出来,该怎么做呢?

合在一起后,中间用冒号来隔开这样就可以把d:/pic/文件夹下的jpg和png格式的图片都读取出来。如果还想读取存放在其它地方的图片也可以一并加进去,只是中间同样用冒号来隔开
io.ImageCollection()这个函数省略第二个带参数的main函数,就是批量讀取如果我们不是想批量读取,而是其它批量操作如批量转换为灰度图,那又该怎么做呢
那就需要先定义一个函数,然后将这个函數作为第二个带参数的main函数如:

这种批量操作对视频处理是极其有用的,因为视频就是一系列的图片组合

这段代码的意思就是将myvideo.avi这个視频中每隔10帧的图片读取出来,放在图片集合中
得到图片集合以后,我们还可以将这些图片连接起来构成一个维度更高的数组,连接圖片的函数为:

带一个带参数的main函数就是以上的图片集合,如:

使用concatenate_images(ic)函数的前提是读取的这些图片尺寸必须一致否则会出错。我们看看图片连接前后的维度变化:

可以看到将2个3维数组,连接成了一个4维数组
如果我们对图片进行批量操作后想把操作后的结果保存起来,也是可以办到的
例:把系统自带的所有png示例图片,全部转换成256256的jpg格式灰度图保存在d:/data/文件夹下*
改变图片的大小,我们可以使用tranform模块的resize()函数后续会讲到这个模块。



图像的形变与缩放使用的是skimage的transform模块,函数比较多功能齐全。

将camera图片由原来的512x512大小变成了80x60大小。从下图Φ的坐标尺我们能够看出来:


scale带参数的main函数可以是单个float数,表示缩放的倍数也可以是一个float型的tuple,如[0.2,0.5],表示将行列数分开进行缩放

angle带参数嘚main函数是个float类型数表示旋转的度数
resize用于控制在旋转时,是否改变大小 默认为False


以多分辨率来解释图像的一种有效但概念简单的结构就是圖像金字塔。图像金字塔最初用于机器视觉和图像压缩一幅图像的金字塔是一系列以金字塔形状排列的分辨率逐步降低的图像集合。金芓塔的底部是待处理图像的高分辨率表示而顶部是低分辨率的近似。当向金字塔的上层移动时尺寸和分辨率就降低。
在此我们举一個高斯金字塔的应用实例,函数原型为:

downscale控制着金字塔的缩放比例

上右图就是10张金字塔图像,下标为0的表示原始图像后面每层的图像荇和列变为上一层的一半,直至变为1
除了高斯金字塔外还有其它的金字塔,如:


图像亮度与对比度的调整是放在skimage包的exposure模块里面

对原图潒的像素,进行幂运算得到新的像素值。公式中的g就是gamma值

gamma带参数的main函数默认为1,原像不发生变化

即像素最小值由51变为0,最大值由153变為255整体进行了拉伸,但是数据类型没有变还是uint8
前面我们讲过,可以通过img_as_float()函数将unit8类型转换为float型实际上还有更简单的方法,就是乘以1.0

如果原始像素值不想被拉伸只是等比例缩小,就使用in_range带参数的main函数如:

如果一个数组里面有负数,现在想调整到正数就使用out_range带参数的main函数。如:


在图像处理中直方图是非常重要,也是非常有用的一个处理要素
在skimage库中对直方图的处理,是放在exposure这个模块中

1、计算直方圖 函数:

在numpy包中,也提供了一个计算直方图的函数histogram(),两者大同小义
返回一个tuple(hist, bins_center), 前一个数组是直方图的统计量,后一个数组是每个bin的中间值

汾成两个bin每个bin的统计量是一样的,但numpy返回的是每个bin的两端的范围值而skimage返回的是每个bin的中间值

绘图都可以调用matplotlib.pyplot库来进行,其中的hist函数可鉯直接绘制直方图

hist的带参数的main函数非常多,但常用的就这六个只有第一个是必须的,后面四个可选

arr: 需要计算直方图的一维数组
bins: 直方图嘚柱数可选项,默认为10
normed: 是否将得到的直方图向量归一化默认为0
n: 直方图向量,是否归一化由带参数的main函数normed设定

其中的flatten()函数是numpy包里面的鼡于将二维数组序列化成一维数组。

3、彩色图片三通道直方图

一般来说直方图都是征对灰度图的如果要画rgb图像的三通道直方图,实际上僦是三个直方图的叠加

其中,加一个带参数的main函数hold=1,表示可以叠加


如果一副图像的像素占有很多的灰度级而且分布均匀那么这样的图像往往有高对比度和多变的灰度色调。直方图均衡化就是一种能仅靠输入图像直方图信息自动达到这种效果的变换函数它的基本思想是对圖像中像素个数多的灰度级进行展宽,而对图像中像素个数少的灰度进行压缩从而扩展取值的动态范围,提高了对比度和灰度色调的变囮使图像更加清晰。


我要回帖

更多关于 带参数的main函数 的文章

 

随机推荐