C++ 如何在c++;与西米亚
我有一个superSpeed usb 3.0 Ximea摄像头,我正在尝试用Ximea摄像头编写一个应用程序,该摄像头包括计算机视觉和机器学习 我已经能够将相机捕获的帧放在缓冲区中,但我可以找到将这些图像或帧保存为JPEG或BMP文件的方法。我不知道它是否只是我脚本中的一个命令行,或者我需要一些库来完成它 使用以下命令获取图像:C++ 如何在c++;与西米亚,c++,image,camera,save,ximea,C++,Image,Camera,Save,Ximea,我有一个superSpeed usb 3.0 Ximea摄像头,我正在尝试用Ximea摄像头编写一个应用程序,该摄像头包括计算机视觉和机器学习 我已经能够将相机捕获的帧放在缓冲区中,但我可以找到将这些图像或帧保存为JPEG或BMP文件的方法。我不知道它是否只是我脚本中的一个命令行,或者我需要一些库来完成它 使用以下命令获取图像: #define EXPECTED_IMAGES 10 for (int images=0;images < EXPECTED_IMAGES;images++) {
#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);
}
#定义预期的图像10
对于(int images=0;images
由于我可以从图像中提取数据,我假设帧仍在缓冲区中,但我无法找出将其保存为计算机中的JPEG或BMP文件的方法
我将非常感谢您对代码的任何帮助
谢谢大家! 要存储来自XIMEA摄像头的图像,我建议使用OpenCV库 因为它提供了存储JPEG和BMP图像格式的工具。请下载 一个简短的示例演示了几种不同数据格式的存储 从相机到JPEG和BMP图像。从下载带有MSVC 2013项目和OpenCV3.0二进制文件的归档文件,并使用密码SHWJGRAIHFLG 提取 如果您对XIMEA产品有任何其他问题,请访问 并直接在网上注册。多谢各位 致以最良好的祝愿,
XIMEA团队啊哈,正在保存图像。我想你现在可能已经得到答案了。 但这是我的,我希望这对任何使用机器视觉相机的人都有用。 我已经在西米亚工作了很长一段时间了XIMEA API不包含任何将图像从缓冲区保存到硬盘的函数。因此,您需要编写自己的函数或使用一些库来保存图像。我认为,从本质上讲,这一切都取决于它是原始图像还是压缩图像,以及你想保存什么样的图像格式。例如BMP、JPEG、PNG、PGM、EXR 让我们先做两个假设
FILE *file;
char fileName = "example.pgm";
char *image;
int width = 1024;
int height = 1024;
int byte_per_pixel = 1;
int max_pixel_value = 255;
file = fopen (fileName , "w+bx");
if(file == NULL){
fprintf(stderr, "Cannot open %s\n", fileName);
return -1;
}
size_t n = 0;
n += fprintf(file, "P5\n# Comment goes here!\n%d %d\n%d\n", width, height, max_pixel_value);
n += fwrite(image, 1, width * height * byte_per_pixel, file);
fclose (fileToSave);
将图像保存到PGM可能看起来很容易,但当您需要保存像素深度高于8位的图像时,您需要处理endianness问题,因为PGM采用big-endian格式。如果您想了解更多有关Netpbm格式的信息,请访问下面的链接
而且,其他格式可能有更复杂的数据结构,所以您不能简单地放一个标题。因此,使用图像库或OpenCV将大大减少麻烦string fileName = "example.png";
char *image;
int width = 1024;
int height = 1024;
int byte_per_pixel = 1;
int max_pixel_value = 255;
cv::Mat img_raw = cv::Mat(height, width, CV_8UC1, image);
vector compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(0);
cv::imwrite(PNGFileName, img_raw, compression_params);
imwirte将根据文件扩展名确定要保存的格式。还有几行代码。OpenCV可以毫不费力地为您保存图像。这里是指向imwirte的OpenCV文档的链接我希望我的答案能帮助您和其他想知道如何保存图像的人。一个错误答案的完美例子。没有解释和断开的链接。谢谢你的提示,下载链接已经修复,现在应该可以工作了。