2014-11-14 3 views
0

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

Неизвестная ошибка (не удалось найти писателя для указанного расширения) в сорте :: imwrite_, файл ........ \ OpenCV \ модули \ highgui \ SRC \ loadsave.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

Кажется, что я отлично работаю на своем конце. Вы уверены, что папка существует? – Xonxt

+0

В папке действительно существует версия открытой версии cv? –

+0

Вы уверены, что 'imgH' и/или' frame' являются допустимыми изображениями? – AldurDisciple

ответ

0

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

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

спасибо за глядя на него.

Смежные вопросы