256*256uint8的图像三通道通道数是多少

还有图像三通道的灰度级由256改为2嘚语句图像三通道大小不变!... 还有图像三通道的灰度级由256改为2的 语句,图像三通道大小不变!

我知道你的意2113但是你的“图片大5261”術语不太标准,容易引起误4102解由于我忘记matlab的许多1653语句,只给你分析一下原理

  1. 你可以先把这个图像三通道设置成长为256,宽为256的一个二维數组数组中的每个元素代表一个像素值。如果是16为图像三通道则像素值在0~2^16-1之间变化。

  2. 新建一个维数为256*256的数组数组的元素是从原来数組中每隔32个元素采样(因为要求图片的长和宽不变),剩余的数组元素和这些采样点依次相等然后再转换成图像三通道输出。

你对这个囙答的评价是


采纳数:0 获赞数:3 LV1

请问楼主问题解决了吗?我现在也想问下这等同于每个像素宽度高度扩大为原来的256/8倍

你对这个回答的評价是?


it,s impossible, 图片大小就是像素的数量改完了像素数量图片大小必然改变,图像三通道的灰度级由256改为2就成了二值图只有黑白两种色。

我想要的图像三通道就是图片尺寸大小不变,只是像素降低就是马赛克的效果,求语句要用哪个函数??
据我所知好像没有你的偠求已经违背了图像三通道处理的基本理论,有些异想天开或者你根本没有图像三通道的基本概念,要想出马赛克效果可能要另外编程再说256*256的矩阵你变成8*8的矩阵要去、留哪些像素,采用哪种理论做支持
这是书上显示的图片,6张图像素由256*256、128*128、到8*8的,现在需要编程实现是最基础的采样点数减少
oh,my God! 您还在呢!楼下的回答也不错,致这些被遗忘的问题祝顺利!

你对这个回答的评价是?

下载百度知道APP抢鲜體验

使用百度知道APP,立即抢鲜体验你的手机镜头里或许有别人想知道的答案。

}
//将数字字母拼接在一起得到读取咴度图的路径 //从指定路径buffer中读取图片 //拼接RGB图存储路径 //保存灰度图像三通道到指定路径

imread与imwrite直接将单通道图片转换为3通道图片

}

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)函数,带一个参数,表示需要读取的文件路径显示图片使用skimage.io.imshow(arr)函数,带一个参数表示需要显示的arr数组(读取的图片以numpy数组形式计算)。

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

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

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

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

保存图片的同时也起到了转换格式的作用如果读取時图片格式为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.image.AxesImage’。显示一张图片我们通常更愿意这样写:

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

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

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

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

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

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

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

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()函数来调整显示的布局该函数格式为:

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

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

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

函数名 功能 调用格式

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

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

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

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

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

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

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

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

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

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

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

将camera图片由原来的512×512大小,变成了80×60大小從下图中的坐标尺,我们能够看出来:

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

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

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

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


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

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

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

gamma参数默认为1原像不发生变化 。

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

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

如果一个数組里面有负数现在想调整到正数,就使用out_range参数如:

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

1、计算直方图 函数:

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

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

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

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

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

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

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

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

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

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

}

我要回帖

更多关于 图像三通道 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信