在Python中读入索引的彩色图像
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Python中读入索引的彩色图像,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4320字,纯文字阅读大概需要7分钟。
内容图文
索引彩色图像是具有整数(1,2,… N)的像素的图像,并且对于每个整数,关联的颜色从给定的彩色图映射到该像素.在MATLAB中,可以通过以下方式读取索引彩色图像:
[im, colormap] = imread('indexed.png');
我怎样才能在Python中做同样的事情?我尝试过OpenCV,scikit-image,但它们都会自动转换为RGB.
解决方法:
经过一番研究,这就是我想出的.您可以使用Python Imaging Library – 特别是枕头叉:https://python-pillow.github.io/
安装包,然后您可以使用Image类中的Image.open方法打开图像.如果您的图像具有颜色贴图,则图像将自动作为索引图像加载.要使其可用,请使用NumPy并使用numpy.array构造函数.我假设您可以使用NumPy,因为scikit-image和OpenCV都使用NumPy作为图像处理的基础骨干:
from PIL import Image
import numpy as np
im = Image.open("image.png") # Replace with your image name here
indexed = np.array(im) # Convert to NumPy array to easier access
最后,如果您想要实际用于图像的颜色贴图/调色板,请使用属于Image类的Image.getpalette方法.但是,这将为您提供num_colours x 3元素列表.因此,要确定您拥有多少种颜色,只需将此列表的长度除以3.但是,MATLAB中加载的颜色映射是标准化的,而getpalette不会将其标准化,默认为加载的图像类型.这样,您必须通过查看转换后的NumPy图像版本来推断图像类型是什么,然后使用它来标准化您的颜色贴图:
因此:
# Get the colour palette
palette = im.getpalette()
# Determine the total number of colours
num_colours = len(palette)/3
# Determine maximum value of the image data type
max_val = float(np.iinfo(indexed.dtype).max)
# Create a colour map matrix
map = np.array(palette).reshape(num_colours, 3) / max_val
为了证明我们有这个正确,这是一个索引图像from a question that I helped solve a while ago:
使用MATLAB加载此图像:
[indexed, map] = imread('http://i.stack.imgur.com/OxFwB.png');
当我将索引图像中的行280到290和列400到410作为双重检查时,我得到了这个:
>> indexed(280:290, 400:410)
ans =
59 60 61 62 65 64 59 56 56 53 49
61 61 64 65 65 60 60 57 58 53 53
67 62 67 56 60 62 60 61 51 59 55
65 60 62 61 58 58 53 55 57 55 54
66 58 56 59 56 56 52 55 52 55 52
68 68 61 61 61 56 56 55 55 57 59
66 59 59 66 68 62 62 60 60 60 53
70 68 64 58 61 63 67 61 67 56 59
69 67 63 64 62 65 63 68 67 64 58
61 68 68 72 71 73 70 66 63 64 64
68 67 70 71 71 69 64 64 65 64 58
这是我在运行等效代码获取索引图像时在Python中获得的内容.请注意,我将图像物理下载到计算机上并从磁盘加载.请注意,NumPy开始索引为0而不是1,因此我不得不将范围减去1.另请注意,范围运算符的结尾是独占的:
In [29]: indexed[279:290, 399:410]
Out[29]:
array([[59, 60, 61, 62, 65, 64, 59, 56, 56, 53, 49],
[61, 61, 64, 65, 65, 60, 60, 57, 58, 53, 53],
[67, 62, 67, 56, 60, 62, 60, 61, 51, 59, 55],
[65, 60, 62, 61, 58, 58, 53, 55, 57, 55, 54],
[66, 58, 56, 59, 56, 56, 52, 55, 52, 55, 52],
[68, 68, 61, 61, 61, 56, 56, 55, 55, 57, 59],
[66, 59, 59, 66, 68, 62, 62, 60, 60, 60, 53],
[70, 68, 64, 58, 61, 63, 67, 61, 67, 56, 59],
[69, 67, 63, 64, 62, 65, 63, 68, 67, 64, 58],
[61, 68, 68, 72, 71, 73, 70, 66, 63, 64, 64],
[68, 67, 70, 71, 71, 69, 64, 64, 65, 64, 58]], dtype=uint8)
那匹配……现在彩色地图怎么样?我们来看看MATLAB和Python之间的前10行颜色映射:
MATLAB
>> format long g;
>> map(1:10,:)
ans =
0 0 0
0.0156862745098039 0.00392156862745098 0.0274509803921569
0.0313725490196078 0.00784313725490196 0.0588235294117647
0.0470588235294118 0.0117647058823529 0.0901960784313725
0.0627450980392157 0.0156862745098039 0.12156862745098
0.0784313725490196 0.0196078431372549 0.152941176470588
0.0941176470588235 0.0235294117647059 0.184313725490196
0.109803921568627 0.0274509803921569 0.215686274509804
0.125490196078431 0.0313725490196078 0.247058823529412
0.141176470588235 0.0352941176470588 0.27843137254902
Python
In [30]: map[:10,:]
Out[30]:
array([[ 0. , 0. , 0. ],
[ 0.01568627, 0.00392157, 0.02745098],
[ 0.03137255, 0.00784314, 0.05882353],
[ 0.04705882, 0.01176471, 0.09019608],
[ 0.0627451 , 0.01568627, 0.12156863],
[ 0.07843137, 0.01960784, 0.15294118],
[ 0.09411765, 0.02352941, 0.18431373],
[ 0.10980392, 0.02745098, 0.21568627],
[ 0.1254902 , 0.03137255, 0.24705882],
[ 0.14117647, 0.03529412, 0.27843137]])
……看起来很匹配!
内容总结
以上是互联网集市为您收集整理的在Python中读入索引的彩色图像全部内容,希望文章能够帮你解决在Python中读入索引的彩色图像所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。