从 IplImage 中提取并保存图像
Extract and save an image from a IplImage
我正在使用 Ximea 相机,使用 C++ 编程并使用 Ubuntu 14.04。我有一个 XI_IMG 图像,下一次转换我正在创建一个 OpenCV 图像,将数据从 xiAPI 缓冲区复制到 OpenCV 缓冲区。
stat = xiGetImage(xiH, 5000, &image);
HandleResult(stat,"xiGetImage");
XI_IMG* imagen = ℑ
IplImage * Ima = NULL;
char fname_jpg[MAX_PATH] = "";
Ima = cvCreateImage(cvSize(imagen->width, imagen->height), IPL_DEPTH_8U, 1);
memcpy(Ima->imageData, imagen->bp, imagen->width * imagen->height);
imwrite("image1", Ima);
完成后我应该能够保存或显示图像,但显示下一个错误:
program.cpp:76:24:error:invalid initialization of reference of type 'cv::InputArray {aka const cv::_InputArray&}' from expression of type 'IplImage* {aka IplImage*}'
有没有其他方法获取或保存图片?我还能做些什么来保存 jpg 图片?
您正在将 IplImage*
、cv<SomeFunction>()
等旧的(和过时的)C 语法与当前的 C++ 语法混合在一起。
为了使其工作一致,只使用一种 样式 。
使用IplImage
int main()
{
IplImage* img = NULL;
img = cvCreateImage(...);
// Save
cvSaveImage("myimage.png", img);
// Show
cvShowImage("Image", img);
cvWaitKey();
return 0;
}
或使用新语法(更好):
int main()
{
Mat img(...);
// Save
imwrite("myimage.png", img);
// Show
imshow("Image", img);
waitKey();
return 0;
}
请注意,在初始化 Mat
后,您不需要 memcpy
数据,但您可以调用以下构造函数之一:
C++: Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
C++: Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
C++: Mat::Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0)
最后一招,你可以 wrap 你的 IplImage
在 Mat
中,然后使用 imwrite
:
Mat mat(Ima);
imwrite("name.ext", mat);
我正在使用 Ximea 相机,使用 C++ 编程并使用 Ubuntu 14.04。我有一个 XI_IMG 图像,下一次转换我正在创建一个 OpenCV 图像,将数据从 xiAPI 缓冲区复制到 OpenCV 缓冲区。
stat = xiGetImage(xiH, 5000, &image);
HandleResult(stat,"xiGetImage");
XI_IMG* imagen = ℑ
IplImage * Ima = NULL;
char fname_jpg[MAX_PATH] = "";
Ima = cvCreateImage(cvSize(imagen->width, imagen->height), IPL_DEPTH_8U, 1);
memcpy(Ima->imageData, imagen->bp, imagen->width * imagen->height);
imwrite("image1", Ima);
完成后我应该能够保存或显示图像,但显示下一个错误:
program.cpp:76:24:error:invalid initialization of reference of type 'cv::InputArray {aka const cv::_InputArray&}' from expression of type 'IplImage* {aka IplImage*}'
有没有其他方法获取或保存图片?我还能做些什么来保存 jpg 图片?
您正在将 IplImage*
、cv<SomeFunction>()
等旧的(和过时的)C 语法与当前的 C++ 语法混合在一起。
为了使其工作一致,只使用一种 样式 。
使用IplImage
int main()
{
IplImage* img = NULL;
img = cvCreateImage(...);
// Save
cvSaveImage("myimage.png", img);
// Show
cvShowImage("Image", img);
cvWaitKey();
return 0;
}
或使用新语法(更好):
int main()
{
Mat img(...);
// Save
imwrite("myimage.png", img);
// Show
imshow("Image", img);
waitKey();
return 0;
}
请注意,在初始化 Mat
后,您不需要 memcpy
数据,但您可以调用以下构造函数之一:
C++: Mat::Mat(int rows, int cols, int type, void* data, size_t step=AUTO_STEP)
C++: Mat::Mat(Size size, int type, void* data, size_t step=AUTO_STEP)
C++: Mat::Mat(int ndims, const int* sizes, int type, void* data, const size_t* steps=0)
最后一招,你可以 wrap 你的 IplImage
在 Mat
中,然后使用 imwrite
:
Mat mat(Ima);
imwrite("name.ext", mat);