前言
前端时间做某个算法对图像像素进行操作,设置了像素值为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之后,读取图片,像素值正常。问题得到解决。
最后
如果觉得文章对您有帮助的话,别忘了给我个赞,谢谢!