2014-03-04 21 views
0

실시간 비디오의 모든 단일 프레임을 .pgm 형식으로 저장하려고합니다. opencv 2.4.8에서 C++로 작업하고 있습니다. 내 문제는 모든 프레임이 저장되고 현상 적으로 올바른 형식 (예 : frame_1.pgm)으로 저장되었지만 .pgm 사진이 있어야 함에도 불구하고 그 프레임을 열 때 회색 음영이 아닌 것입니다. 또한 hexeditor를 사용하여 이미지를 열고 올바른 pgm 사진과 비교했을 때 분명한 차이점이 있습니다! 내가 뭘 잘못하고 있는지 조언 해 줄 수 있습니까? 여기 opencv로 .pgm 이미지를 저장할 때 오류가 발생했습니다.

내 코드의 중요한 부분입니다 :

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

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 
관련 문제