我有QWidget(命名为screenshotLabel),并且它的内容不断变化。我可以将下面的标签内容传到下面的qpixmap(命名为originalPixmap)中。
originalPixmap = QPixmap();
QPixmap pixmap(screenshotLabel->size());
this->render(&pixmap);
originalPixmap = pixmap;
现在我想将其保存为视频文件。但是我无法执行。如何将QWidget内容另存为视频文件?
[我找到了一种使用OpenCV VideoWriter生成视频的方法。我在代码中留下描述正在发生的事情的注释。
originalPixmap = pixmap;
qImageSingle = originalPixmap.toImage(); // Convert QPixmap to QImage
// Get QImage data to Open-cv Mat
frame = Mat(qImageSingle.height(), qImageSingle.width(), CV_8UC3, qImageSingle.bits(), qImageSingle.bytesPerLine()).clone();
namedWindow("MyVideo", CV_WINDOW_AUTOSIZE);
imshow("MyVideo", frame);
vector<int> compression_params;
compression_params.push_back(CV_IMWRITE_PNG_COMPRESSION);
compression_params.push_back(9);
try {
imwrite("alpha2.png", frame, compression_params);
VideoWriter video("out2.avi", CV_FOURCC('M','J','P','G'), 10, Size(qImageSingle.width(), qImageSingle.height()), true);
for(int i=0; i<100; i++){
video.write(frame); // Write frame to VideoWriter
}
}
catch (runtime_error& ex) {
fprintf(stderr, "Exception converting image to PNG format: %s\n", ex.what());
}