2014-11-24 2 views
0

Это кажется довольно простым, но для жизни меня невозможно понять, почему это не сработает. У меня есть аналогичный код, который записывает изображение каждый раз, когда он читает изображение, и это прекрасно работает, сохраняя последнее изображение. Я серьезно озадачен тем, почему это сохраняет одно и то же изображение как img0, так и img1. Если бы вы, ребята, могли пролить свет, это было бы потрясающе! Большое спасибо за то, что нашли время, чтобы прочитать это.Принимать несколько фотографий в opencv

#include "highgui.hpp" 
#include "imgproc.hpp" 
#include "opencv.hpp" 
#include <iostream> 
#include <string> 
#include <unistd.h> 
using namespace std; 
using namespace cv; 

int main(){ 
    VideoCapture stream(0); 
    if(!stream.isOpened()){ 
     cout << "No camera :(\n"; 
    } 
    stream.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
    stream.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 
    int img_num = 0; 
    int num_pics; 
    cout << "How many images do you want to take?\n"; 
    cin >> num_pics; 
    Mat image; 
    while(img_num < num_pics){ 
     cout << "Picture in...\n"; 
     cout << "3...\n"; 
     sleep(1); 
     cout << "2...\n"; 
     sleep(1); 
     cout << "1...\n"; 
     sleep(1); 

     stream.read(image); 
     imshow("pic",image); 
     imwrite(format("img_%d.jpg",img_num),image); 
     waitKey(3000); 
     img_num += 1; 
    } 
    return 0; 
} 

Изменить, чтобы добавить простой код для сохранения каждый кадр записывается (в тот же файл, так что в конечном счете должно быть последнее изображение видно):

#include "/home/sarah/opencv-2.4.9/modules/highgui/include/opencv2/highgui/highgui.hpp" 
#include "/home/sarah/opencv-2.4.9/modules/imgproc/include/opencv2/imgproc/imgproc.hpp" 
#include "/home/sarah/opencv-2.4.9/include/opencv2/opencv.hpp" 
#include <iostream> 
using namespace std; 
using namespace cv; 

int main(){ 
    VideoCapture stream(0); 
    //stream.set(CV_CAP_PROP_FPS,1); 
    if(!stream.isOpened()){ 
     cout << "No camera :(\n"; 
    } 
    cout << "After\n"; 
    stream.set(CV_CAP_PROP_FRAME_WIDTH, 640); 
    stream.set(CV_CAP_PROP_FRAME_HEIGHT, 480); 
    Mat cameraFrame; 
    while(1){ 
     stream.read(cameraFrame); 
     imshow("camera",cameraFrame); 
     imwrite("img.jpg",cameraFrame); 
     if(waitKey(30) == 13){ 
      break; 
     } 
    } 
    return 0; 
} 
+0

Что значит «У меня есть похожий код, который пишет изображение каждый раз, когда он читает изображение, и это прекрасно работает»? где этот код? – Samer

+0

сделал 'imshow (" camera ", cameraFrame);' показывать ожидаемый результат? – lanpa

+0

Нет, это не @lanpa – marshmallow

ответ

0

вот виновник:

imwrite(filename,image); 

atm, он сохранит любое изображение к тому же имени файла (таким образом, переписывая любые предыдущие). то, что вы хотите, скорее всего, больше похоже на:

imwrite(format("img_%d.jpg",img_num) ,image); 
+0

Проблема не в том, что файл перезаписывается. Потому что даже с этим редактированием первое сделанное изображение сохраняется во все последующие файлы .jpg. – marshmallow

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