gpt4 book ai didi

java - 如何使用 Java 将 Postgres 中的图像检索到 Matlab 中?

转载 作者:行者123 更新时间:2023-12-02 08:37:14 27 4
gpt4 key购买 nike

我接到了一个有点奇怪的任务,大约有 1500-2000 个 jpeg 图像,大小都在 1-50kb 左右。它们目前存储在我用 Postgres 创建的一个简单数据库中。我已经很长时间没有大量使用 Matlab 和 Postgres 了,所以非常感谢任何帮助或建议!

我需要将存储在数据库中的图像从数据库中获取到Java中。最后一步是将图像从 Java 检索到 Matlab 中,以便以与 Matlab 中 imread 函数相同的方式存储图像。 imread 函数读取图像并创建一个 n x m x 3 的 uint8 值矩阵数组,这些值表示 RGB 的像素强度。

Atm 我已经用 Java 将图像进出数据库,当前将图像存储在 bytea 列数据类型中。是最好使用的数据类型吗?

如何从数据库中取回数据,以便它是我放入的构造的 jpeg 图像或采用请求的矩阵数组格式?

目前我不明白检索到的数据。它位于大约 70,000 个元素的字节数组中,其中包含 -128 到 128 之间的值。帮助!?!

注意:我无法使用数据库工具包

另一个更新:我已经解决了与 post 相关的问题关于“UTF-8”编码错误。

如果有人偶然发现此页面,我将尽快尝试发布的任何答案!我真的很感谢你的想法和答案。再次感谢。

最佳答案

当你说你在 bytea 列中有图像时,它到底是如何存储的?它存储的是 JPEG 文件内容的字节,还是 RGB 像素值的数组,还是其他什么? “Bytea”只是一个二进制字符串,它可以存储几乎任何格式的数据。

我假设它是 JPEG 内容。在这种情况下,您可以做的是通过 Java 检索 jpeg 内容,将它们保存到临时文件,然后在临时文件上调用 imread()。

这些[-128,127]值是有符号字节Java的值。即使没有 Database Toolbox,您也可以调用常规 JDBC 或使用它的其他 Java 代码。您用来获取这些值的 Java 方法 - 从 Matlab 调用它(在类路径上使用您的 JAR),它应该以 int8 数组的形式返回该数组,或者您可以转换为数组的数组。

鉴于在名为“bytes”的 Matlab 变量中,您可以使用类似以下内容将其写入临时文件。

file = [tempname() '.jpg'];
fid = fopen(file, 'wb');
fwrite(fid, bytes, 'int8');
fclose(fid);

通过指定“int8”精度,我认为您可以跳过将它们转换为无符号字节的步骤,这是更常见的约定。将 int8s 写为 'int8' 或将 uint8s 写为 'uint8' 将生成相同的文件。如果您确实需要将它们转换为无符号,请使用 Matlab 的 typecast() 函数。

unsigned_bytes = typecast(bytes, 'uint8');

此时,您可以对临时文件调用 imread,然后将其删除。

img = imread(file);
delete(file);

关于java - 如何使用 Java 将 Postgres 中的图像检索到 Matlab 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245837/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com