首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Ximea在c++中存储图像

如何用Ximea在c++中存储图像
EN

Stack Overflow用户
提问于 2015-09-07 10:49:58
回答 2查看 1.9K关注 0票数 1

我有一个superSpeed USB3.0XIMEA摄像头,我试图用一个由计算机视觉和机器学习组成的Ximea摄像头来编写一个应用程序。

我已经能够在它的缓冲器中将摄像机捕捉到的帧解压缩,但是我可以找到将这些图像或帧保存为JPEG或BMP文件的方法。我不知道这是我的脚本中的命令行,还是需要某种库来完成。

使用以下命令获取图像:

代码语言:javascript
复制
#define EXPECTED_IMAGES 10
for (int images=0;images < EXPECTED_IMAGES;images++)
{
    // getting image from camera
    stat = xiGetImage(xiH, 5000, &image);
    HandleResult(stat,"xiGetImage");
    printf("Image %d (%dx%d) received from camera\n", images, (int)image.width, (int)image.height);

}

由于我可以从图像中提取数据,所以我假设该帧仍在缓冲区中,但我无法找到将其保存为计算机中的JPEG或BMP文件的方法。

我希望能在密码方面提供任何帮助。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-12 21:32:09

啊哈,保存图像。我想你现在可能已经找到答案了。但这是我的,我希望这对任何使用机器视觉相机的人都有帮助。我已经使用XIMEA很长一段时间了。XIMEA不包括将图像从缓冲区保存到硬盘驱动器的任何函数。因此,您需要编写自己的函数或使用一些库来保存图像。我认为,从本质上讲,这一切都取决于它是原始的还是压缩的图像,以及你想保存什么样的图像格式。即。BMP,JPEG,PNG,PGM,EXR .

让我们先做几个假设。

  1. 在这里,我假设您希望保存每像素8位的原始图像,其分辨率为1024*1024。图像大小为8位* 1024 * 1024 =8388608位= 1048576btye ~= 1MB。
  2. 通过查看代码,您可以在C++中使用XIMEA。

好.以下是我最常使用的从XIMEA保存图像的两种方法。

  1. 将所有图像像素写入二进制文件,并根据要保存的格式设置适当的标题。下面是一个将数据保存到PGM格式映像的示例。 文件*文件;char fileName = "example.pgm";char *图像;int宽度= 1024;int高度= 1024;int byte_per_pixel = 1;int max_pixel_value = 255;file = fopen (fileName,"w+bx");if(文件== NULL){ fprintf(stderr,“无法打开%s\n",fileName);返回-1;} size_t n= 0;N += fprintf(文件,"P5\n#注释转到这里!\n%d\n“,宽度,高度,max_pixel_value);n += fprintf(图像,1,宽度*高度* byte_per_pixel,文件); 将图像保存到PGM似乎很容易,但是当您需要保存像素深度高于8位的图像时,您需要处理endianness问题,因为PGM的大端格式。这里有一个指向Netpbm格式的链接,如果您想了解更多有关它的内容的话。格式化 而且,其他格式的数据结构可能要复杂得多,所以不能简单地放下一个标头。因此,使用映像库或OpenCV就不会那么麻烦了。
  2. ,方便的OpenCV给打烙印。因为你要处理像素,所以OpenCV是一个很好的库。OpenCV是一个强大的库,它帮助您比以往任何时候都更容易地操作矩阵。它还附带了很多有用的东西,比如GPU加速的OpenCV函数。回到主题,imwrite可以将图像保存为多种格式。下面是我编写的一个示例,用于将原始数据保存为PNG格式。 字符串fileName = "example.png";字符*图像;int宽度= 1024;int高度= 1024;int byte_per_pixel = 1;int max_pixel_value = 255;cv:Mat img_raw = cv::Mat (高度、宽度、CV_8UC1、图像);向量compression_params;example.png compression_params.push_back(0); imwirte将根据文件扩展名确定要保存的格式。还有几行代码。OpenCV毫不费力地为您保存了图像。下面是指向imwirte,video.html?highlight=imwrite的OpenCV文档的链接

我希望我的答案能帮助你和其他人想知道如何保存图像。

票数 3
EN

Stack Overflow用户

发布于 2015-09-08 09:34:22

为了存储来自XIMEA相机的图像,我建议使用OpenCV库,因为它提供了存储JPEG和BMP图像格式的工具。请下载一个简短的示例,演示将几种不同的数据格式从摄像机存储到JPEG和BMP图像。从这里下载MSVC 2013项目和OpenCV3.0二进制文件的存档,并使用密码SHWJGRAIHFLG进行提取。

如果您对XIMEA产品有任何其他问题,请直接访问并在XIMEA客户支持上注册。谢谢。

致以良好的问候,XIMEA团队

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32436857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档