请教:使用libjpeg时,“读入”和“写出”的颜色不同!

LeonTown 2010-10-28 04:14:47
如题,
使用libjpeg对一幅jpeg文件,
用jpeg_read_scanlines函数读入像素后,再用jpeg_write_scanlines函数写出到新的jpeg文件后,
颜色发生了变化。。。

并且,将一组值全为0(黑色)的数据,用用jpeg_write_scanlines写入到jpeg图片后,
颜色竟然为绿色。

但是,同样用jpeg_read_scanlines函数读入像素后,再写到BMP文件中,
颜色和原来的一致。

请问,为什么用jpeg_write_scanlines函数写出后,
颜色会改变啊?
...全文
276 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
memoleak 2010-10-29
  • 打赏
  • 举报
回复
在decode完以后,会根据你的选择进行色彩空间转换,所以实际你读出来的颜色是转换好以后的颜色值,其色彩空间并不一定是原图的色彩空间。实际的色彩空间是转换好以后的色彩空间。
LeonTown 2010-10-29
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 memoleak 的回复:]

在decode完以后,会根据你的选择进行色彩空间转换,所以实际你读出来的颜色是转换好以后的颜色值,其色彩空间并不一定是原图的色彩空间。实际的色彩空间是转换好以后的色彩空间。
[/Quote]

确实如此,长宽高读的都是解压后的,
唯独色彩空间这里读错了。。。
LeonTown 2010-10-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 memoleak 的回复:]

检查一下色彩空间是不是一致的
[/Quote]

似乎的确是色彩空间的问题。
我从原图中读出来的色彩空间值是:jpeg_color_space=3;

将其直接赋给写出的色彩空间后,发生了颜色的变化,
但如果我强制将写出的色彩空间设为JCS_RGB,则结果颜色正常!

另外,JCS_RGB的值为2,
对同一幅图像,其色彩空间值不应该改变,
难道是读出的值被加1了吗?
LeonTown 2010-10-28
  • 打赏
  • 举报
回复
色彩空间也是从读到的值,赋给写出的值,
并且色彩空间值为3,应该是RGB。
memoleak 2010-10-28
  • 打赏
  • 举报
回复
检查一下色彩空间是不是一致的

4,511

社区成员

发帖
与我相关
我的任务
社区描述
图形图像/机器视觉
社区管理员
  • 机器视觉
  • 迪菲赫尔曼
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧