2014-03-04 99 views
0

.PGM圖像時,我要保存.PGM格式的實時視頻的每一幀中。我在C++中使用opencv 2.4.8。我的問題是,儘管所有幀都以正確的格式(例如frame_1.pgm)保存並呈現出來,但是當我打開它們時,它們不是灰度的,因爲.pgm照片應該是。此外,我用hexeditor打開了圖像,並將它們與正確的pgm照片進行了比較,並且有明顯的區別!有人可以對我所做的錯誤提供任何建議嗎?錯誤節能與OpenCV的

這裏是我的代碼的關鍵部分:

///////////////////////////////// /////////////////////////////

vector<int> compression_params; 
compression_params.push_back(CV_IMWRITE_PXM_BINARY); 
compression_params.push_back(0); 

    captureDevice1>> captureFrame1; 


    imwrite("frame_55.pgm",captureFrame1,compression_params); 


    //string imagename=argv[2]; 
    string imagename="frame_"; 
    //string imagename="frame_"; 
    char numberfile[17]; 
    sprintf_s(numberfile,17,"%u",im); 
    imagename+=numberfile; 
    imagename+=".pgm"; 

    std::ifstream in(imagename.c_str(), std::ios::binary); 
    if (!in) 
    { 
     std::cout << "Error in Image: " << imagename << std::endl; 
     continue; 
    } 
    in.close(); 

////////////// ////////////////////////////////////////////////// ///////

現在,如果我嘗試加載圖像:frame_55.pgm我得到一個「不支持的格式」的錯誤,而它正常工作與其他.PGM圖像!

日Thnx提前傢伙您的時間!

+0

你解決這個問題呢?我有一個非常類似的問題。 –

+0

不幸的是......如果我發現,但我會更新帖子!請如果你發現任何相同的東西...謝謝! –

+0

我的確有一個建議是如果一個圖像的內存中表示是一個數組上的'imdecode'。 –

回答

0

這是更正後的代碼:

//Device1 

VideoCapture captureDevice1; 
captureDevice1.open(0); 

//setup files used in capture process 
//Device1 

Mat captureFrame1; 
Mat grayscaleFrame1; 



    for(int im=0; im<=numimages; im++){ 

    // Load the source image into our simple image class. 


    captureDevice1>> captureFrame1; 

    if(captureFrame1.empty()) 
    { 
     cout<<"empty frame skipped"<<endl; 
    continue; 
    } 


// name each frame as frame_numOframe 

stringstream strs; 
strs << im; 
string temp_str = strs.str(); 
temp_str="frame_"+temp_str+".pgm";//assign coords into one string 

//parameters for saving as .pgm 

vector<int> compression_params; 
compression_params.push_back(CV_IMWRITE_PXM_BINARY); 
compression_params.push_back(0); 

cvtColor(captureFrame1,grayscaleFrame1, CV_BGR2GRAY);//convert to grayscale 
imwrite(temp_str,grayscaleFrame1);//save image