Сохранение изображения в OpenCV - PullRequest
25 голосов
/ 12 мая 2009

Я новичок в OpenCV и пытаюсь сделать снимок, а затем сохранить его в файл. Ниже выложен код для вашей справки, ниже.

Файл jpg сохраняется, но он черный.

// Capture the Image from the webcam
CvCapture *pCapturedImage = cvCreateCameraCapture(0);

// Get the frame
IplImage *pSaveImg = cvQueryFrame(pCapturedImage);

// Save the frame into a file
cvSaveImage("test.jpg". ,pSaveImg); // A JPG FILE IS BEING SAVED
                                    // OF 6KB , BUT IT IS BLACK

Все функции выполнены успешно. Я пробовал приведенный выше код как в XP, так и в Vista - в результате получается черное изображение на обоих. Пожалуйста, дайте мне знать, что я пропускаю.

Ответы [ 15 ]

1 голос
/ 14 мая 2009

Я использую следующий код для захвата изображений:

CvCapture* capture = cvCaptureFromCAM( CV_CAP_ANY );
if(!capture) error((char*)"No Capture");
IplImage *img=cvQueryFrame(capture);

Я знаю, что это точно работает

0 голосов
/ 26 января 2017

надеюсь, это сохранит изображения с вашей веб-камеры

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <iostream>

using namespace std;
using namespace cv;

int main()
{
   VideoCapture cap(0);

   Mat save_img;

   cap >> save_img;

   char Esc = 0;

   while (Esc != 27 && cap.isOpened()) {        
    bool Frame = cap.read(save_img);        
    if (!Frame || save_img.empty()) {       
        cout << "error: frame not read from webcam\n";      
        break;                                              
    }
    namedWindow("save_img", CV_WINDOW_NORMAL);  
    imshow("imgOriginal", save_img);            
    Esc = waitKey(1);
}
imwrite("test.jpg",save_img); 
}
0 голосов
/ 25 апреля 2011

В OSX сохранение видеокадров и фотографий работало только тогда, когда я указывал полный путь к cvSaveImage:

cvSaveImage("/Users/nicc/image.jpg",img);
0 голосов
/ 15 мая 2010

Я думаю, просто камера не инициализируется в первом кадре. Попробуйте сохранить изображение после 10 кадров.

0 голосов
/ 04 июля 2009

Из моего опыта первые несколько кадров, которые захватываются при использовании:

frame = cvQueryFrame( capture );

Тенденция к заполнению. Возможно, вы захотите немного подождать (около 3 секунд) и затем попытаться сделать снимок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...