Python操作图像

Python操作图像_第1张图片

作者:金良([email protected]) csdn博客:http://blog.csdn.net/u012176591


操作图像数据时常会对数组的维度进行转变,这里贴一下Python的reshape()函数的例子,可以留意一下该函数是怎么进行维度转变的

Python操作图像_第2张图片

由于一般操作的图像数据时灰度图像,这里介绍一下灰度图像的概念。

灰度(Gray scale)图像是一种具有从黑到白256级灰度等级(0~255,0表示黑,255表示白)的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。灰度圖像與黑白圖像不同,在計算機圖像領域中黑白圖像只有黑白兩種顏色,灰度圖像在黑色與白色之間還有許多級的顏色深度。灰度图像与RGB也不同,RGB对每个像素点用Red、Green、Blue三种颜色的值(每个值介于0~255,表示颜色强度)来标记,而不像灰度图一样只用一个表示灰度的值来标记。所以灰度图的数据矩阵是二维的,而RGB图的数据矩阵是三维的,矩阵元素的值都是0~255的整数值。RGB到灰度图的转换,即由R、G、B三个值影射到灰度的算法有不止一种。


操作图像的Python源码,包含了读取图片获得数组,数组的维度变换以及对数组转换成图片三个操作:

def countnum(data):#返回高维数组的元素的个数
    dshape = data.shape
    num=1
    for i in range(len(dshape)):
        num *= dshape[i]
    return num
#获取图像的RGB数据,保存为数组
rgb = numpy.array(img.open('coloredbox.jpg'))
#获取图像的灰度数据,保存为数组
gray = numpy.array(img.open('coloredbox.jpg').convert('L'))
#数据的维度,前者是三维的,后者是二维的
print "由图像得到的数组:",rgb.shape,gray.shape
#RGB数据元素个数
numrgb = countnum(rgb)
#灰度数据元素个数
numgray = countnum(gray)
#将图像数据保存成一维数据
rgb1 = rgb.reshape(numrgb,1)
gray1 = gray.reshape(numgray,1)
print "由图像得到的数组转换成一维后:",rgb1.shape,gray1.shape
#获取RGB图像的维度信息
d1,d2,d3 = rgb.shape
#根据维度信息和一维数组恢复RGB的三维数组
rgb = rgb1.reshape(d1,d2,d3)
#获取灰度图像的维度信息
d1,d2 = gray.shape
#根据维度信息和一维数组恢复灰度的二维数组
gray = gray1.reshape(d1,d2)
print "从一维恢复到原来的维度:",rgb.shape,gray.shape
#将灰度的二维数组保存成图像
arrayGray2Image = img.fromarray(gray)
arrayGray2Image.save('aa.jpg')
#将RGB的三维数组保存成图像
arrayRGB2Image = img.fromarray(rgb)
arrayRGB2Image.save('bb.jpg')
#读取保存的图像数据信息,查看是否有损失,答案是没有
rgb = numpy.array(img.open('aa.jpg'))
gray = numpy.array(img.open('bb.jpg').convert('L'))
print "由数组重新生成的图像得到的数组:",rgb.shape,gray.shape


用到或生成的几个图像

colorbox.jpg

Python操作图像_第3张图片

aa.jpg

Python操作图像_第4张图片


bb.jpg

Python操作图像_第5张图片


几个链接

  • RGB转灰度图的几种算法
    http://bbs.ednchina.com/BLOG_ARTICLE_1999487.HTM 
  • 用Python操作和处理图像
    http://www.ituring.com.cn/tupubarticle/2024 

你可能感兴趣的:(python,图像,RGB,灰度)