void VSQtOpenCVImage::btnvideo_click() {
VideoCapture cap(0);
QString path = "D:\\opencvvideo.avi";
String vpath = cv::format(path.toLocal8Bit());
VideoWriter writer;
//保存在当前目录
writer.open(vpath, VideoWriter::fourcc('M', 'P', '4', '2'), 30.0, Size(640, 480), true);
if (!cap.isOpened()) {
qDebug() << "video not open";
return;
}
qDebug() << "video open";
int width = cap.get(cv::CAP_PROP_FRAME_WIDTH);
int height = cap.get(cv::CAP_PROP_FRAME_HEIGHT);
//读取视频存放mat
Mat frame;
int nframe = 0;
namedWindow("opencvvideo", 0);
resizeWindow("opencvvideo", 960, 480);
moveWindow("opencvvideo", 200, 100);
while(true) {
int frameid = cap.get(cv::CAP_PROP_POS_FRAMES);
std::cout << "frame id = " << frameid << std::endl;
double t = getTickCount();
double t1 = getCPUTickCount();
cap.read(frame);
//cap >> frame;
if (frame.empty()) {
qDebug() << "frame empty continute";
continue;
}
nframe += 1;
t = (getTickCount() - 1) * 1000 / getTickFrequency();
std::cout << "nframe" << nframe << "decode time for a frame" << t << "ms" << std::endl;
qDebug() << nframe;
qDebug() << t;
writer.write(frame);
imshow("opencvvideo", frame);
int k = waitKey(10);
if (k == 27) {
break;
}
}
cap.release();
destroyAllWindows();
}
Qt+OpenCV 读取摄像头视频并保存.
最新推荐文章于 2024-03-30 22:48:34 发布