需要帮助将 BMP 图像转换为 [R] 中的矩阵吗?

Posted

技术标签:

【中文标题】需要帮助将 BMP 图像转换为 [R] 中的矩阵吗?【英文标题】:Need help converting a BMP image to a matrix in [R]? 【发布时间】:2013-05-28 08:58:01 【问题描述】:

我对 R 非常陌生,我想知道是否有一种简单的方法可以将 BMP 图像转换为 R 中的矩阵。主要是,我正在寻找任何可以提供帮助的软件包。矩阵中每个元素的值将对应颜色。

【问题讨论】:

如果您可以将位图图像存储为 png 格式,则可以使用来自png 包的readPNG,否则您可以使用readbitmap 包。 【参考方案1】:

在 CRAN 包列表中搜索“bmp”会弹出bmp 和其他一些,为简洁起见,我将只使用这个包。

library(bmp)
fl <- system.file("images", "5HT1bMARCM-F000001_seg001_lsm.bmp",  package = "bmp")
b <- read.bmp(fl)

这个对象是一个数组,包含一些关于文件的信息:

 str(b)
 int [1:206, 1:206, 1:3] 107 111 119 123 115 119 119 139 143 143 ...
 - attr(*, "header")=List of 13
  ..$ filesize     : num 127774
  ..$ offset       : num 54

这是一个 3D 数组:

dim(b)
[1] 206 206   3

有一个as.raster 函数,它接受一个可选的max 参数:

m <- as.raster(b, max = 255)

这个矩阵m 现在是一个二维颜色矩阵(十六进制)。

str(m)
 'raster' chr [1:206, 1:206] "#6B0303" "#6F0303" "#770303" ...


dim(m)
[1] 206 206

让我们绘制这个东西,我们需要设置一个绘图,然后找出它的范围,这样我们就可以用我们的图像填充设备。

plot(1, type = "n", axes = FALSE, xlab = "", ylab = "")
usr <- par("usr")
rasterImage(m, usr[1], usr[3], usr[2], usr[4])

您的需求将取决于您的 BMP 文件使用的存储选项以及您用于读取它的软件。

还有其他选项,使用readbitmap 包和rgdal(也许通过raster),但这取决于您可以在您的机器上安装什么。

【讨论】:

好的,所以我开始使用 read.bmp 来尝试其中的一些。我制作了一张 16x16 的图像,全是黑白的。我首先通过 readPNG 解释它(相同的图像,但作为 png 文件),我得到的值都是 1 以下的小数(对于黑色像素)或 1 对于白色像素。当我将相同的图像保存为单色 bmp 时,它不会通过 read.bmp 读取它。有什么想法吗? 这不是帮助您的好信息,为什么不详细说明您所做的事情和您的期望呢?请参阅此处获取指南:***.com/questions/5963269/…

以上是关于需要帮助将 BMP 图像转换为 [R] 中的矩阵吗?的主要内容,如果未能解决你的问题,请参考以下文章

将字节数组转换/显示为 bmp/jpeg 图像

如何用MATLAB把bmp格式变成灰度图像

如何使用opencv将图像转换为Python中的矩阵

需要帮助将 JPG 链接转换为 GIF 格式

无法将 BMP 图像转换为矩形 OpenGL

如何在 C++ 中将图像从 .bmp 转换为 .png