前言

PNG图像除了支持常见的灰度,真彩色,带alpha通道的灰度,带alpha通道的真彩色外,还支持8bit rgb/二值图像(通过索引color pallete来实现)。

在语义分割的训练样本准备过程中,需要生成8bit rgb彩色png图,如下所示。这个时候如果直接用opencv的imread和imwrite读写操作,只能生成8bit png灰度图或24bit的真彩图。

解决办法

既然opencv不能保存成8bit的rgb png,这里就推荐用PIL库中的Image模块来读写png。样例代码如下

import numpy as np
from PIL import Image # 使用PIL库中的Image模块 img = Image.open(photo_file)
gray_img = img.convert('L')
... ...

上面样例代码中的Convert()会根据传入参数的不同将图像变成不同的模式。PIL中有九种不同模式。分别为1,L, P, RGB,RGBA,CMYK,YCbCr,I,F。

这里重点介绍8bit png图像对应的模式参数。

模式‘1’为二值图像,非黑即白。但是它每个像素用8个bit表示,0表示黑,255表示白。

模式‘L’为灰色图像它的每个像素用8个bit表示,0表示黑,255表示白,其他数字表示不同的灰度。在PIL中,从模式“RGB”转
换为“L”模式是按照下面的公式转换的:
    L = R * 299/1000 + G * 587/1000+ B * 114/1000

模式“P”为8位彩色图像,它的每个像素用8个bit表示,其对应的彩色值是按照调色板查询出来的。

结论

所以,如果想读写8bit rgb彩色png图像,就得用模型"P"。 具体示例代码如下所示。

import numpy as np
import PIL.Image as Imagesrc= Image.open("1.png")
mat = np.array(src)
dst = Image.fromarray(mat, 'P')
bin_colormap = [0,0,0] + [255,0,0]*254    # 彩色调色板,以具体情况来定
dst.putpalette(bin_colormap)
dst.save('new.png')
src.close()

如何读写8bit rgb彩色png图像相关推荐

  1. matlab实现基于24位真彩色BMP图像的文件信息隐藏方法(实验内容)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.24位真彩色BMP图像 1.简介 2.文件格式 二.算法(四种) 三.matlab实现 1.图像文件尾部添加信息 2.位 ...

  2. 一幅RGB彩色原图和其三个分量的显示,RGB图转换成HSI的显示

    数字图形处理实验记录 实验一 :一幅RGB彩色原图和其三个分量的显示,RGB图转换成HSI的显示 转换原理:采用圆锥模型公式 测试步骤: Matlab转化函数: function HSI = RGB2 ...

  3. C语言实现将彩色bmp图像转化为灰图、灰度图像反色

    彩色图像转灰度图像 彩色(24位)bmp图像结构: typedef struct{bitmapFileHeader bfHeader;bitmapInfoHeader biHeader;unsigne ...

  4. 对彩色花图像进行分类-基于R语言的Keras实现

    该案例摘自<Keras深度学习入门.实战及进阶>第四章综合案例内容. 该案例的数据来源于Kaggle上的Flower Color Images(https://www.kaggle.com ...

  5. 《Microduino实战》——3.6 RGB彩色LED——彩色的世界

    本节书摘来自华章出版社<Microduino实战>一 书中的第3章,第3.6节,作者:姚琪 杨立斌,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.6 RG ...

  6. java 三原色_opencv3_java 提取图像的RGB三原色分割图像Split Core.split

    提取图像的RGB三原色分割图像Split Core.split package opencv_java_demo; import java.util.List; import org.opencv.c ...

  7. Ardunio开发实例-ISL29125 RGB彩色光传感器

    ISL29125 RGB彩色光传感器 ISL29125是具有I2 C(兼容SMBus)接口的低功耗,高灵敏度,红色,绿色和蓝色彩色光传感器(RGB). 其最先进的光电二极管阵列可提供准确的RGB光谱响 ...

  8. 在Python中使用OpenCV将RGB格式的图像转换为HSV格式的图像

    An HSV is another type of color space in which H stands for Hue, S stands for Saturation and V stand ...

  9. 自己融合RGB和Depth图像

    如何有效的融合融合RGB和Depth图像? 可以通过对两个通道进行卷积,然后融合,但是效果可能不太好,现在大部分都是通过注意力融合,之前自己想通过ASPP进行融合,因为ASPP可以捕捉上下文信息,但是 ...

  10. 去毛边 叶片图像_彩色叶片图像去尘算法

    彩色叶片图像去尘算法 杨 森 , 冯 全 * , 杨 梅 , 李妙祺 ( 甘肃农业大学工学院 兰州 730070) (1535361383@qq.com) 摘 要 : 针对户外降尘造成叶片图像中颜色失 ...

最新文章

  1. python怎么导入包-python怎样导入包
  2. ccf-csp #201903-4 消息传递接口
  3. git 提交_使用Git-Rebase合并多次提交
  4. TCP,UDP发送数据包大小浅析
  5. 前端学习(1162):箭头函数面试题
  6. jQuery之全选功能
  7. 12c闪回 oracle_Oracle 12c R2新特性: PDB级闪回(Flashback PDB)
  8. Personal Leetcode solution(Python) 1~20
  9. 使用cairo绘制图形的部分函数总结
  10. Bailian4107 19岁生日礼物-Birthday Gift【进制】
  11. python中jupyter notebook 去掉警告
  12. 时域OCT与频域OCT的区别
  13. 什么是模块化,模块化的好处是
  14. python3入门教程 pdf_Python基础教程第3版(Beginning Python From Novice to Professional 3th) pdf...
  15. 什么是APS高级计划排程(生产计划排产)系统主要功能模块有哪些?
  16. 错误: Unable to find explicit activity class ...have you declared this activity in your AndroidMa
  17. 关于个人对培训的看法
  18. 基于SqlServer的DML(数据查询)实验,掌握select查询语句的使用、掌握有无条件查询、结果排序与分组、掌握视图用法
  19. 三维目标识别算法综述
  20. yum报错网络不可达,但是配置的网络能够ping通

热门文章

  1. 24段魔尺拼图指南_拼图项目动手指南
  2. vue移动端点击事件延迟_如何解决移动端Click事件300ms延迟的问题?
  3. python代码情话_程序员的土味情话~(内含表白代码)
  4. grpc-go源码剖析九之dnsResolver解释器以及实战测试coredns
  5. cytus2打开显示taptap服务器,音乐世界Cytus2黑屏怎么办_音乐世界Cytus2黑屏解决方法_游戏吧...
  6. 怎么下载b站的弹幕(danmuku)
  7. 达索系统3DEXPERIENCE 平台应用程序组件
  8. 大数据信息资料采集:百度地图腾讯地图高德地图商家信息采集
  9. 安装程序无法打开注册表项 UNKNOWN\Components\…解决办法
  10. Java核心技术 卷Ⅰ 基础知识(原书第10版)