当前位置: 首页 > news >正文

python如何读取被压缩的图像

读取压缩的图像数据:

PackBits  压缩介绍:

CCITT T.3 压缩介绍:


读取压缩的图像数据:

在做图像处理的时候,平时都是使用 函数io.imread() 或者是 函数cv2.imread( ) 函数来读取图像数据,很少用PIL.Image.open()函数来读取数据,一直都认为三者区别不大,只是读取得到的图像通道顺序和格式不一样

今天遇到了需要读取压缩的图像,使用io.imread()函数以及函数cv2.imread(),都报如下图所示的错误:

ValueError: <COMPRESSION.CCITTRLE: 2> not supported 

翻译过来就是不支持读取此压缩格式的图像

后来我检查了需要读取的图像数据,确确实实被压缩了,  压缩格式分别为 CCITT T.3 和 PackBits

之前使用 io.imread( ) 以及 cv2.imread( ) 函数读取数据的时候没有注意到图像是否被压缩的问题,直到今天需要读取压缩图像数据,然后报错,才意识到这三个读取图像数据函数的差别

所以,在我的代码中,我使用函数 PIL.Image.open( ) 来读取压缩的图像数据

PIL库支持PackBits压缩格式

from PIL import Imageimage = Image.open('your_image_file.tif')
image_data = np.array(image)

上述代码将 使用PIL库的 Image.open()函数打开图像文件,并使用np.array()函数将图像转换为NumPy数组

运行过程中显示:

PackBits  压缩介绍:

遥感影像通常需要被压缩为PackBits格式以减小文件大小,提高存储和传输效率

以下是一些使用PackBits压缩格式的原因:

  1. 空间效率:遥感影像通常具有较大的尺寸,尤其是高分辨率的遥感数据。为了减小文件大小,使其更容易存储和传输,压缩是必要的。PackBits压缩算法可以在不引入太多失真的情况下,有效地减小文件大小

  2. 快速压缩和解压缩:PackBits压缩算法是一种简单而快速的压缩算法。它对于遥感影像的压缩和解压缩速度较快,这在处理大量遥感数据时非常重要

  3. 保持数据完整性:PackBits压缩算法是一种无损压缩算法,它保持了压缩前后数据的完整性。这对于遥感影像数据非常重要,因为遥感数据通常包含重要的地理和科学信息,不能有任何失真或损失

需要注意的是,PackBits压缩算法相对于其他更高级的压缩算法(如JPEG)可能无法实现较高的压缩比。因此,在某些情况下,为了更好的压缩效果,可能会选择其他压缩算法。但PackBits仍然是一种常见的无损压缩算法,被广泛应用于遥感影像和其他需要保持数据完整性的领域

CCITT T.3 压缩介绍:

CCITT T.3是一种 用于黑白图像压缩 的标准,也被称为 Group 3压缩

CCITT T.3压缩算法主要用于传真机和文档扫描仪等设备中,用于将黑白图像压缩为较小的文件大小。该算法基于一种称为Modified Huffman(MH)编码的技术

CCITT T.3压缩算法的基本原理是 通过编码连续的行数据来实现压缩。在每一行中,它使用一种称为Run Length Encoding(RLE)的技术来表示连续的像素值。当连续的像素值相同时,只需存储一个像素值和一个计数值,而不是逐个存储每个像素。这样可以大大减小文件的大小

CCITT T.3还使用了一些其他的技术来进一步减小文件大小,如差分编码和位填充。差分编码用于处理相邻行之间的像素差异,而位填充用于确保每个字节都包含8位数据

需要注意的是,CCITT T.3压缩算法是一种无损压缩算法,它保持了压缩前后数据的完整性。这使得它非常适用于需要保留图像细节和准确性的应用,如文档扫描和传真传输

相关文章:

  • 亲爱的程序猿们,元旦快乐!
  • 1.3MySQL中的自连接
  • 【Linux】Shell
  • nodejs业务分层如何写后端接口
  • Docker 安装 Nacos
  • C Primer Plus 第6版 编程练习 chapter 12
  • 机器学习之人工神经网络(Artificial Neural Networks,ANN)
  • 在Spring Boot中使用Redis
  • Solidworks学习笔记
  • 工具--Git详解
  • 【Qt-QString】
  • Ksher H5页面支付实例指导 (PHP实现)
  • C语言——最古老的树
  • java基础之String、StringBuilder、StringBuffer的异同
  • Mysql(5日志备份恢复)
  • JavaScript-如何实现克隆(clone)函数
  • 【前端学习】-粗谈选择器
  • git 常用命令
  • Java 最常见的 200+ 面试题:面试必备
  • Java方法详解
  • Laravel Mix运行时关于es2015报错解决方案
  • Leetcode 27 Remove Element
  • Linux中的硬链接与软链接
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • spring boot下thymeleaf全局静态变量配置
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 前嗅ForeSpider采集配置界面介绍
  • 新版博客前端前瞻
  • 用jquery写贪吃蛇
  • 正则与JS中的正则
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​【原创】基于SSM的酒店预约管理系统(酒店管理系统毕业设计)
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #if 1...#endif
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #职场发展#其他
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (70min)字节暑假实习二面(已挂)
  • (C11) 泛型表达式
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (附源码)计算机毕业设计ssm基于Internet快递柜管理系统
  • (十六)一篇文章学会Java的常用API
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (转)【Hibernate总结系列】使用举例
  • (转)IIS6 ASP 0251超过响应缓冲区限制错误的解决方法
  • (转载)在C#用WM_COPYDATA消息来实现两个进程之间传递数据
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET CF命令行调试器MDbg入门(一)
  • .NET Core MongoDB数据仓储和工作单元模式封装
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net的DataSet直接与SQL2005交互
  • .NET连接数据库方式
  • ;号自动换行
  • @html.ActionLink的几种参数格式