使用 opencv 和 Qt 使用 QFileDialog::getOpenFileName 打开图像

Posted

技术标签:

【中文标题】使用 opencv 和 Qt 使用 QFileDialog::getOpenFileName 打开图像【英文标题】:open image using opencv and Qt using QFileDialog::getOpenFileName 【发布时间】:2015-02-19 20:16:48 【问题描述】:

我创建了一个最简单的 Gui,只有一个按钮来使用 Qt 读取和显示图像,按钮的插槽是:

    void MainWindow::on_pushButton_clicked()

    QString fileName = QFileDialog::getOpenFileName(this,
                                                    tr("Open image"),
                                                    tr("."),
                                                    tr("Image Files (*.png *.jpg *.jpeg *.bmp * .tif)"));

    image= cv::imread(fileName);
    cv::namedWindow("Original Image");
    cv::imshow("Original Image", image);

我有以下错误:

error: invalid initialization of reference of type 'const string& aka const std::basic_string<char>&' from expression of type 'QString'
     image= cv::imread(fileName);
                               ^

如何成功使用 QFileDialog 类将有效路径传递给 imread?

【问题讨论】:

不完全重复,但请参阅此问题的答案:***.com/questions/4214369/… 谢谢这解决了我的问题! 【参考方案1】:

正如您在 opencv 文档中看到的那样,必须使用 imread 方法,如下所示: Mat cv::imread ( const String & 文件名, int 标志 = IMREAD_COLOR ); QString 是一种只与 qt 库兼容的字符串类型,因此必须将 QString 转换为 String 才能正确使用 imread 方法。

使用: imread(fileName.toStdString());

【讨论】:

以上是关于使用 opencv 和 Qt 使用 QFileDialog::getOpenFileName 打开图像的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows 中使用 Qt 配置 openCV

使用 Qt 并行化 OpenCV 处理

如何在 Qt5 中使用 OpenCV

使用 opencv 和 Qt 录制视频

QT下opencv的编译和使用

OpenCV 2.3 和 Qt 4.3.7