2016-09-25 1 views
0

J'ai récemment utilisé ce morceau de code pour enregistrer les données de l'image d'une webcamOpenCV imread un cadre

#include <opencv\cv.h> 
#include <opencv\highgui.h> 
#include <opencv2/opencv.hpp> 
using namespace cv; 

#include <fstream> 
using namespace std; 

int main(int argc, char** argv) 
{ 
VideoCapture cap(0); // open the default camera 
if (!cap.isOpened()) // check if we succeeded 
    return -1; 

cap.set(CV_CAP_PROP_FPS, 15); 

Mat edges; 
namedWindow("image", 1); 
std::vector<cv::Mat> images(100); 
for (int i = 0; i < 100; ++i) { 
    // this is optional, preallocation so there's no allocation 
    // during capture 
    images[i].create(480, 640, CV_8UC3); 
} 
for (int i = 0; i < 100; ++i) 
{ 
    Mat frame; 
    cap >> frame; // get a new frame from camera 
    frame.copyTo(images[i]); 
} 
cap.release(); 

for (int i = 0; i < 100; ++i) 
{ 
    imshow("image", images[i]); 
    if (waitKey(30) >= 0) break; 
} 

Après cela, je veux utiliser imread pour analyser les images nouvellement coupée en deux. Cependant, je ne peux pas penser à un moyen d'accomplir cela.

J'ai essayé: Mat colorImage = imread(images[i]);

Cependant, elle conduit à:

error C2664: 'cv::Mat cv::imread(const cv::String &,int)': cannot convert argument 1 from 'std::vector<cv::Mat,std::allocator<_Ty>>' to 'const cv::String &' with [ _Ty=cv::Mat ]

Merci beaucoup à l'avance :)

Répondre

1

fonction imread permet d'ouvrir l'image à partir du disque.

Vous avez déjà vecteur d'images pour que vous venez de faire:

Mat colorimage = images [i];

et btw. il n'y a pas besoin de ceci:

for (int i = 0; i < 100; ++i) { 
    // this is optional, preallocation so there's no allocation 
    // during capture 
    images[i].create(480, 640, CV_8UC3); 
} 

parce que vous allouent nouvel espace de toute façon, sauf que vous capturez les images directement comme ceci:

cap >> images[i];