要将OpenCV的imshow函数指定到Qt窗口中,可以使用Qt的QImage类来实现。下面是一个简单的示例代码:
#include <opencv2/opencv.hpp>
#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QPixmap>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 创建一个Qt窗口
QWidget window;
QLabel label(&window);
cv::VideoCapture capture(0);
if (!capture.isOpened()) {
return -1;
}
cv::Mat frame;
while (capture.read(frame)) {
// 将OpenCV的Mat转换为QImage
QImage image(frame.data, frame.cols, frame.rows, QImage::Format_RGB888);
image = image.rgbSwapped(); // BGR -> RGB
// 使用QPixmap显示图像
QPixmap pixmap = QPixmap::fromImage(image);
label.setPixmap(pixmap.scaled(label.size(), Qt::KeepAspectRatio));
// 更新Qt窗口
window.show();
int key = cv::waitKey(1);
if (key == 'q') {
break;
}
QApplication::processEvents(); // 处理Qt事件
}
capture.release();
return a.exec();
}
这个示例代码创建了一个Qt窗口,并在其中显示从摄像头捕获的视频帧。通过将OpenCV的Mat转换为QImage,然后再使用QPixmap在Qt窗口上显示图像。需要注意的是,在循环中调用QApplication::processEvents()
来处理Qt事件,以保持界面响应。
请确保在编译时链接正确的Qt库,并将OpenCV和Qt的头文件路径设置正确。
内容由零声教学AI助手提供,问题来源于学员提问