Как я могу получить неподвижное изображение с камеры, используя imwrite в OpenCV C ++?

0

этот код должен отображать канал веб-камеры, и когда вы нажимаете клавишу s, сохраните изображение в файл в выбранном пути. Это не работает. imwrite сбрасывает программу с помощью этого кода ошибки.

Неопределенная ошибка (не удалось найти запись для указанного расширения) в cv :: imwrite_, файле........ \opencv\modules\highgui\src\loadedave.cpp, строка 275

вот мой код, который он сбой на строке 99 imwrite (buffer, imgh); если вы можете думать о том, как я смогу сделать это, сохраните этот образ, я был бы очень благодарен.

#include <opencv/cv.h> 
#include "opencv2/highgui/highgui.hpp"
#include <iostream>
#include <cstdlib>
#include <windows.h> 

using namespace cv;
using namespace std;

double Brightness;
double Contrast;
double Saturation;
double Gain;
double Exposure; 

char buffer[100];
int  i = 0;
int  c = 1; 

int main(int argc, char* argv[])
{

    VideoCapture cap(0); // open the video camera no. 0


    if (!cap.isOpened()){
         cout << "Cannot open the video cam" << endl;
         return -1;
    }


    double dWidth = cap.get(CV_CAP_PROP_FRAME_WIDTH); //get the width of frames of the video
    double dHeight = cap.get(CV_CAP_PROP_FRAME_HEIGHT); //get the height of frames of the video
    cap.set(CV_CAP_PROP_AUTO_EXPOSURE,0.0 );                // turn off auto exposure 

    // Get fixed Cam Properties

    Brightness = cap.get(CV_CAP_PROP_BRIGHTNESS); 
    Contrast   = cap.get(CV_CAP_PROP_CONTRAST );
    Saturation = cap.get(CV_CAP_PROP_SATURATION);
    Gain       = cap.get(CV_CAP_PROP_GAIN);
    Exposure   = cap.get(CV_CAP_PROP_AUTO_EXPOSURE ); 


    // Display Them 

    cout<<"===================================="<<endl;
    cout<<"Default Brightness -------> "<<Brightness<<endl;
    cout<<"Default Contrast----------> "<<Contrast<<endl;
    cout<<"Default Saturation--------> "<<Saturation<<endl;
    cout<<"Default Gain--------------> "<<Gain<<endl;
    cout<<"Default exp --------------> "<<Exposure<<endl; 
    cout<<"===================================="<<endl;


    // console adjustment for testing  

    cout << "\nFrame size : " << dWidth << " x " << dHeight << endl;
    int bright; 
    cout<< "\nbrightness level -100 - 100 " << endl; 
    cin>> bright;  
    cout <<"\nbrightness level: " <<bright <<endl; 

    namedWindow("Video"); //create a window called "MyVideo"


    for(;;) 
    {

        Mat frame;

        cap >> frame;   

        int x = 200;
        Sleep(x); 

        Mat imgH = frame + Scalar(0.0722*bright, 0.7152*bright, 0.7152*bright); // convert BGR to Luminance set to color space 

        char ch =waitKey(30); 
        sprintf(buffer, "C:\\pics\\image%d.jpg" ,c); 
        cvWaitKey(10); 

        //save image frmae 

        if (ch == 's'){
        cvWaitKey(10); 
        cout<< "new frame in window " <<buffer<<endl;  
        imshow("Video", imgH );
        imwrite(buffer, imgH); //  <-- this is not working die in a hole!!!
        c++ ;
        }

        // Camera Properties 

        if (ch == 'p'){ 
        cap.set(CV_CAP_PROP_SETTINGS , 1 ); 
        }

        //Exit

        if (ch == 27){ 
        cout << "esc key is pressed by user" << endl;
        return 0;  
       }
     }
    return 0;
}
  • 0
    Кажется, хорошо работает на моем конце. Вы уверены, что папка существует?
  • 0
    папка существует, какую версию open cv вы используете?
Показать ещё 2 комментария
Теги:
opencv

1 ответ

0

Он работает нормально. Проблема была в версии визуальной студии, которую я использовал. Я переключился на 2010 год и динамически связал библиотеки, и код работает.

как установить opencv и библиотеки ссылок в visual studio 2010 https://www.youtube.com/watch?v=cgo0UitHfp8&list=PLvwB65U8V0HHCEyW2UTyOJym5FsdqfbHQ

спасибо, что посмотрели на него.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню