我从工作中的某些硬件获得了一些奇怪的图像。它们来自这个奇怪的硬件,它将多个图像拼接在一起并存储为原始图像。想想其中一个计算机安全显示器,一次显示四个图像。基本上就是这样。然后他们被存储为原始图像。 Annnnd,根本没有关于这件旧垃圾的文件。
我尝试编写一个提取器将图像拆分为单独的原始文件。但是我用来尝试读取我作为测试提取的图像的原始图像软件表明它已损坏。我目前正在考虑即使它只是原始数据,也应该是文件头。但无论我看起来多么努力,我似乎无法在线找到原始图像文件的定义。我看到有大量不同的原始图像文件类型,但我甚至找不到那些定义。
对我有什么建议吗?
编辑:重读后,我不认为我很清楚。我在阅读我希望拆分的原始文件中做了一个假设,假设我认为文件中没有标题,并开始复制我用第一个数据字节提取的第一个图像的数据。我也在我写出的图像文件中做了同样的假设,并且在我复制图像时没有写任何标题。我相信我对没有标题的假设是不正确的,我要求澄清。为了帮助阐明这一点,我提供了我写的测试代码:
#include <stdio.h>
#include <string.h>
using namespace std;
//size of individual image
int width = 400;
int height = 400;
//size of input image
int inputWidth = 1600;
int inputHeight = 8000;
int offset = 16;
char strInputFile[] = "captured.raw";
char strOutputFile[] = "extracted.raw";
int main()
{
printf( "Hi\n" );
FILE* pInput = NULL;
FILE* pOutput = NULL;
char* buf = new char[width];
memset( buf, 0, width );
pInput = fopen( strInputFile,"rb" );
pOutput = fopen( strOutputFile,"wb" );
if( pInput && pOutput )
{
for( int i = 0; i < height; i++ )
{
//read in a row of pixels
fread( buf, 1, width, pInput );
//write out the row of pixels
fwrite( buf, 1, width, pOutput );
//move the file pointer forward to the next row of pixels
fseek( pInput, inputWidth - width, SEEK_CUR );
}
}
fclose( pInput );
fclose( pOutput );
return 0;
}
答案 0 :(得分:2)
看到原始图像格式的异构程度,我建议采用以下方法:
答案 1 :(得分:1)
您是否阅读了raw image format?
答案 2 :(得分:1)
现代原始图像采用各种格式,包含标题和元数据,通常是压缩的,有时使用有损压缩进行压缩。许多原始格式未公开记录。 FreeImage可用于从许多数码相机中读取原始图像。
较旧的安全系统和其他相机可能只是存储原始数据 - 构成图像的一组数字而不是其他内容。这可能会也可能不会被压缩,它可能是也可能不是RGB值。
如果没有文档,您可能需要检查文件的数据并使用历史悠久的反复试验编程技术。或者获得新相机。 : - )