计算机如何将彩色或黑白图像转换为二进制? 相反,如何将二进制数据转换为图像? 我的意思是问它如何实际处理图像数据?

#1楼 票数:11

您的问题涉及许多变量。 位深度,色彩空间,压缩和存储格式。

但基本的想法有点像这样。

图像由像素组成。 100x100尺寸的图像有10,000像素。 原始数据需要表示每个像素的颜色值。 这是比特深度发挥作用的地方。 如果每个像素只有1位,则只能表示两种颜色 - 例如,可能是黑色和白色。 这不会成为一个特别有趣的形象。 你可以通过使用点画来欺骗眼睛看到阴影。 早期的计算机使用4位颜色,最多提供16种颜色,这是一个开始,但8位颜色证明更有趣,允许256种颜色。 随着计算机硬件的改进,每像素的位数增加--16位(65,536种颜色),最后是24位(1600万种颜色)。

接下来是色彩空间。 这描述了颜色信息如何存储在这些位中。 例如 - 许多系统使用32位不仅存储颜色的红色,绿色和蓝色分量,还存储alpha级别(透明度)。 一个基本的例子是ARGB色彩空间/模型 - 前8位是alpha,然后是红色,绿色和蓝色(每个8位)。

获得此数据后,您需要选择存储方式。 为了不丢失任何数据,您可以将其存储为最新格式 - 即:每一位。 但这通常会导致大文件。 例如:在32位时,100x100像素图像将占用40K - 不是太糟糕......但是单帧高清画面呢? 1920x1080像素x 32位? 略低于8MB。 在那个尺寸1秒的镜头将占用大约200MB - 整个电影超过1TB。 这就是压缩的来源。

压缩是一个非常大的主题 - 但让我们看一个非常简单的例子。 如果我们尝试减少必须存储的位数怎么办? 我们可以将许多非常相似的颜色转换成相同的颜色 - 这是以前在网上做了很多的事情。 人们以8位GIF格式存储图像。 随着位深度的减小,它们占用的空间要小得多,但是根据图像的复杂程度,它往往会导致不太理想的视觉效果,渐变最终会出现条纹 - 或者照片会看起来像素化。

希望这能让您对图像的存储方式有所了解。 结帐维基百科 - 我在这里触及的所有主题都有更多深入的信息。 这是一个很好的起点: http//en.wikipedia.org/wiki/Color_depth

  ask by Mothi Mohammed translate from so

未解决问题?本站智能推荐:

1回复

使用Javascript将图像转换为灰度并降低其分辨率

我有以下代码,允许用户拍摄照片,然后将其上传到服务器 (最终将进行进一步的图像处理)。 <form action="/submitphoto" method="post"> <input type="file" capture="camera" accept="
1回复

使用 PIL 将 CMYK 图像转换为 RGB 时如何保持相同的颜色?

将 CMYK 图像转换为 RGB 时,我的颜色会反转。 我想保持相同的(视觉上)颜色并删除 exif 数据。 我需要这样做才能在任何图像或 pdf 查看器上显示转换后的图像。 结果(下面的代码) 原始 CMYK 图片太重,无法上传 -> https://www.dropbox.com/
2回复

imagick的错误将tiff转换为pdf

当我尝试通过转换图片时: 它消除了错误: 我尝试安装并重新安装imagick,libtiff和jpeg。 但这没有帮助。 它曾经可以在同一台机器(Mac Mavericks)上运行,但是我不得不重新启动机器并重新安装所有内容,但现在不起作用。 谢谢。 **(更新)已解
1回复

使用PIL为jpg图像着色

我使用PIL和Tkinter编写了python代码,在其中显示图像,并在用户单击的图像上放置了一个红色圆圈。 这是相关的代码。 似乎它适用于某些图像,但在某些情况下,它会显示一个灰色圆圈。 我在测试图像上使用了identify ,对于成功的图像,输出为 对于不成功的,输出为:
1回复

Matlab:多个.jpg图像的像素值

我有几百张像这样的图像: 它们位于一个文件夹中,我试图在Matlab中找到一种方法来自动分析每个图像在点(700,755)处的像素值。 我知道如何一次一个地做这个,如下: 这将返回图像特定点的红绿蓝值。 我是Matlab的新手......什么样的代码会分析文件夹中的每个图像并
2回复

用C写一个JPG图像文件

我读取JPEG图像文件并将其位存储到文本文件中。 现在我想使用文本文件中的那些位转换回有效的JPEG图像。 我试过写一个二进制文件,但它没有检索图像文件。 请引导我走向正确的方向。 我已经把头埋进了这几天,但到目前为止还没有运气。 这是我编写JPG文件的代码: 这是用于
1回复

Java从JPEG保存RAW格式的图像或类似的图像而不加载其全部内容

我想知道是否可以加载巨大的JPEG( 请参阅我的上一个问题 )并保存/以可快速加载的格式使用它,而无需将其完全解码的内容加载到内存中。 主要思想是拥有一种文件格式(或者我不知道哪个函数会在Java中原生执行该功能),从而允许动态加载图像的给定区域,而无需加载800MB数据。 我实际上
5回复

在PHP中使用水印显示多个图像

我想在多个图像上添加水印并在浏览器上显示它们。 这是我的一段代码: 我用过header('Content-type: image/png'); 在我的代码中由于我无法显示所有图像。 在这里,我从数据库中提取图像,然后在其上添加水印,但如果你们中的任何人可以帮助我先添加水印然后将其保