2015-09-22 33 views
0

我正在使用Ximea相機,使用C++編程並使用Ubuntu 14.04。我有一個XI_IMG圖像,並在下一次轉換時創建一個OpenCV圖像,將數據從xiAPI緩衝區複製到OpenCV緩衝區。提取並保存IplImage中的圖像

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圖像?

回答

3

您正在混合使用當前C++語法的舊(和過時的)C語法,如IplImage*cv<SomeFunction>()等等。 爲了使其工作一致並僅使用一個風格

使用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; 
} 

請注意,您不需要memcpy後您的數據初始化Mat,但你可以調用以下構造函數之一:

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) 

最後絕招,你可以Mat包裹IplImage,然後使用imwrite

Mat mat(Ima); 
imwrite("name.ext", mat); 
+0

馬麗娟答案。謝謝。 – sturkmen

相關問題