OPENCV 3.1 videoio error: v4l: устройство / dev / video не может запросить количество каналов

У меня есть программа на C ++, написанная с opencv 3.1 на рабочей станции под управлением Ubuntu 12.04. Программа захватывает кадр с USB-камеры (/ dev / video2) каждые 5 минут, делает кое-что и сохраняет кадр на диск. По какой-то причине программа выдает эту ошибку во время выполнения, но код, кажется, работает нормально, т.е. это захват и сохранение кадров, даже если они работают в течение нескольких дней … Мне просто интересно, что означает ошибка времени выполнения и почему она выдается, и если мне нужно беспокоиться об этом?
ОШИБКА ВИДЕО: V4L: устройство / dev / video2: невозможно запросить количество каналов

вот соответствующий код захвата:

    int capture_frame(int doAlign){

try{

vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);//(CV_IMWRITE_PXM_BINARY);
compression_params.push_back(0);
VideoCapture cap(cameranum); // open the default cameralong
c=0;
while(!cap.isOpened()){ // check if we succeeded
if (!cap.isOpened() && c < 3){
sleep(1);
}
if (!cap.isOpened() && c >=3) return -1;
c++;
}//end while not opened

cap.set(CV_CAP_PROP_FRAME_WIDTH, 1920);

cap.set(CV_CAP_PROP_FRAME_HEIGHT, 1080);Mat frame;
Mat frame_gray;while(frame.empty()){
for (int i=0; i < 10; i++) {cap >> frame;} // get a new frame from camera
}cvtColor(frame, frame_gray, CV_BGR2GRAY); //make it grayMat lastframe;
Mat im2_aligned;stringstream filename;
stringstream lastfilename;
stringstream number;
number << setfill('0') << setw(6) << currentframe;
filename << directory << "frame" << number.str() << ".png";
if (currentframe <1 || doAlign == 0) {

imwrite(filename.str(), frame_gray, compression_params ); //frame vs frame_gray
//cout << "contrast: " << cvGetCaptureProperty(cap,11) << endl;
}else{
number.str("");
number << setfill('0') << setw(6) << currentframe-1;
lastfilename << directory << "/frame" << number.str() << ".pgm";
Mat im1= imread(lastfilename.str());
Mat im1_gray;
cvtColor(im1, im1_gray, CV_BGR2GRAY);

// Define the motion model
const int warp_mode = MOTION_TRANSLATION;

// Set a 2x3 warp matrix
Mat warp_matrix;
warp_matrix = Mat::eye(2, 3, CV_32F);
// Specify the number of iterations.
int number_of_iterations = 5000;

// Specify the threshold of the increment
// in the correlation coefficient between two iterations
double termination_eps = 1e-10;

// Define termination criteria
TermCriteria criteria (TermCriteria::COUNT+TermCriteria::EPS, number_of_iterations, termination_eps);

// Run the ECC algorithm. The results are stored in warp_matrix.
findTransformECC(im1_gray,frame_gray,warp_matrix,warp_mode,criteria);
warpAffine(frame, im2_aligned, warp_matrix, im1.size(), INTER_LINEAR + WARP_INVERSE_MAP);
Mat im2_aligned_gray;
cvtColor(im2_aligned, im2_aligned_gray, CV_BGR2GRAY);
imwrite(filename.str(), im2_aligned_gray, compression_params );
cap.release();}//end if not first frame
currentframe++;
cap.release();
}catch (cv::Exception ex){
cout << " frame was bad! try again" << endl;
return (0);
}//end caught exception trying to load

return (1);

}//end capture frame

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]