c语言读取图片像素值_关于OpenCV设置像素值之后,像素值跟设置的值存在细微偏差的原因...

300cd5e569f372f9be3d214c3456914f.png

前言

前端时间做某个算法对图像像素进行操作,设置了像素值为0和255,但是保存算法执行之后的图片(jpeg格式)。再读取保存的图片,发现某个位置的像素值本来是0或者255的,但是变成了3或者250等值,产生了细微的偏差。看代码也没找出什么问题。后面定位问题应该出在保存图片格式上。

一、OpenCV目前支持的图像格式

OpenCV目前支持的图像格式包括:

1、Windows位图文件 - BMP, DIB;

2、JPEG文件 - JPEG, JPG, JPE;

3、便携式网络图片 - PNG;

4、便携式图像格式 - PBM,PGM,PPM;

5、Sun rasters - SR,RAS;

6、TIFF文件 - TIFF,TIF;

7、OpenEXR HDR 图片 - EXR;

8、JPEG 2000 图片- jp2。

二、常见格式分析

1、Windows位图文件 - BMP, DIB

BMP(全称Bitmap)是Windows操作系统中的标准图像文件格式,可以分成两类:设备相关位图(DDB)和设备无关位图(DIB),使用非常广。它采用位映射存储格式,除了图像深度可选以外,不采用其他任何压缩,因此,BMP文件所占用的空间很大。BMP文件的图像深度可选lbit、4bit、8bit及24bit。BMP文件存储数据时,图像的扫描方式是按从左到右、从下到上的顺序。由于BMP文件格式是Windows环境中交换与图有关的数据的一种标准,因此在Windows环境中运行的图形图像软件都支持BMP图像格式。

2、JPEG文件- JPEG, JPG, JPE

JPEG是一种针对相片图像而广泛使用的一种有损压缩标准方法。这个名称代表Joint Photographic Experts Group(联合图像专家小组)。此团队创立于西元1986年,1992年发布了JPEG的标准而在1994年获得了ISO 10918-1的认定。JPEG与视频音频压缩标准的MPEG(Moving Picture Experts Group)很容易混淆,但两者是不同的组织及标准。JPEG本身只有描述如何将一个图像转换为字节的数据流(streaming),但并没有说明这些字节如何在任何特定的存储媒体上被封存起来。JPEG的压缩方式通常是破坏性数据压缩(lossy compression),意即在压缩过程中图像的质量会遭受到可见的破坏,有一种以JPEG为基础的标准Lossless JPEG是采用无损的压缩方式,但Lossless JPEG并没有受到广泛的支持。使用JPEG格式压缩的图片文件一般也被称为JPEG Files,最普遍被使用的扩展名格式为.jpg,其他常用的扩展名还包括.jpeg、.jpe、.jfif以及.jif。JPEG格式的数据也能被嵌进其他类型的文件格式中,像是TIFF类型的文件格式。

3、便携式网络图片 - PNG

便携式网络图形(Portable Network Graphics)是一种无损压缩的位图片形格式。其设计目的是试图替代GIF和TIFF文件格式,同时增加一些GIF文件格式所不具备的特性。PNG的名称来源于“可移植网络图形格式(Portable Network Graphic Format,PNG)”,也有一个非官方解释“PNG's Not GIF”。PNG使用从LZ77派生的无损数据压缩算法,一般应用于JAVA程序、网页或S60程序中,原因是它压缩比高,生成文件体积小

三、解决问题

将图片保存为bmp或者png之后,读取图片,像素值正常。问题得到解决。

最后

如果觉得文章对您有帮助的话,别忘了给我个赞,谢谢!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值