我有Opencv C++代碼,可以保存圖像時,任何鍵盤按鈕被按下。您可以將此opencv C++代碼轉換爲opencv python。
USAGE:
選項:
按1用於從CAM 1
捕獲按2用於從CAM捕獲2
按d爲從兩個CAM 1 & CAM 2
捕獲
按下a終止
這裏我使用兩個攝像頭,它具有FOV> 180度。因此,兩臺相機可以捕捉一個具有共同視野的圖案。或者你也可以從單個相機捕捉。
#include <opencv2/opencv.hpp>
#include <iostream>
#include <stdio.h>
#include <unistd.h>
using namespace cv;
using namespace std;
int ct = 0;
char key;
char filename[100];
int c = 1;
char filename1[100];
int d = 1;
int main(int, char**)
{
Mat frame,frame1;
cout <<"USAGE:\n"
"Options:\n"
"Press 1 for capturing from CAM 1\n"
"Press 2 for capturing from CAM 2\n"
"Press d for capturing from both CAM 1 & CAM 2\n"
"Press a for Termination"<<endl;
//--- INITIALIZE VIDEOCAPTURE
VideoCapture cap(0);
VideoCapture cap1(1);
// cap.set(CAP_PROP_FRAME_WIDTH,1024);
// cap.set(CAP_PROP_FRAME_HEIGHT,768);
// cap1.set(CAP_PROP_FRAME_WIDTH,1024);
// cap1.set(CAP_PROP_FRAME_HEIGHT,768);
while(true)
{
cap >> frame;
cap1 >> frame1;
double cam_1 =cap.get(CV_CAP_PROP_POS_MSEC);
double cam_2 =cap.get(CV_CAP_PROP_POS_MSEC);
if (frame.empty()||frame1.empty()) {
cerr << "ERROR! blank frame grabbed\n";
break;
}
usleep(5);
imshow("CAMERA 1", frame);
imshow("CAMERA 2", frame1);
tipka = cv::waitKey(30);
if (key == 'd') //CAPTURING IMAGE FROM TWO CAMERA AT A SAME TIME
{
sprintf(filename, "/home/user/capture_imgs/Two_cam/0-%d.jpg", c);
sprintf(filename1, "/home/user/capture_imgs/Two_cam/1-%d.jpg", d);
// imshow("CAMERA 1", frame);
// imshow("CAMERA 2", frame1);
imwrite(filename, frame);
imwrite(filename1, frame1);
cout << "Cam 1 image captured = " << c << endl;
cout << "Cam 2 image captured = " << d << endl;
c++;
d++;
}
if(key == '1') //CAPTURING IMAGE FROM CAM 1
{
sprintf(filename, "/home/user/capture_imgs/CAM_1/0-%d.jpg", c);
// imshow("CAMERA 1", frame);
imwrite(filename, frame);
cout << "Cam 1 image captured = " << c << endl;
c++;
}
if(key == '2') //CAPTURING IMAGE FROM CAM 2
{
sprintf(filename1, "/home/user/capture_imgs/CAM_2/1-%d.jpg", d);
// imshow("CAMERA 2", frame1);
imwrite(filename1, frame1);
cout << "Cam 2 image captured = " << d << endl;
d++;
}
if (key == 'a')
{
cout << "Terminated..." << endl;
usleep(1000);
break;
}
}
return 0;
}
是不是創建文件或文件不好?在前者的情況下嘗試添加一個'print c',被按下!「之前如果看到你得到什麼! –
好的就解決了。問題出在WaitKey上,但我改變了條件:c = cv.WaitKey(25) if(c!= - 1): cv.SaveImage(「f」+ str(i)+「。jpg」,框架) i = i + 1 – user2894507
作爲回答添加記錄此。 –