質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

受付中

C++ Qt creator でOpencvのimreadを使って画像を読み込めない(empty)。

nabla
nabla

総合スコア5

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。

1回答

0評価

1クリップ

1262閲覧

投稿2021/06/17 08:38

編集2022/01/12 10:55

前提・実現したいこと

画像が入ったフォルダーのパスを入力し、そこから画像を読み取りたいです。テキストボックス(lineEdit)に入力されたパスをボタン(pushButton)を押して読み込みます。

発生している問題・エラーメッセージ

imreadで読み込んでもすべてemptyになってしまいます。
画像の読み取りは同じコードでも Visual studio 2019 で実行すれば問題なく読み取れます。

該当のソースコード

ボタンが押されたときの処理 void MainWindow::on_pushButton_clicked(){} 内が該当の箇所です。

C++

#include "mainwindow.h" #include "ui_mainwindow.h" #include <opencv2/opencv.hpp> #include <filesystem> #include <string> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { namespace fs = std::filesystem; /* 入力されたテキストをpathに代入 */ std::string path = ui->lineEdit->text().toUtf8().constData(); cv::Mat img; if(fs::is_directory(path)) { /* フォルダー内の画像を順に読み込む */ for(const auto& file : fs::recursive_directory_iterator(path)) { img = cv::imread(file.path().string()); if(img.empty()){ std::cout << "cannot load : " << file.path().string() << std::endl; } else{ std::cout << "loading ... " << file.path().string() << std::endl; } } std::cout << "----- end -----" << std::endl; } else{std::cout << path << " cannot open : " << path << std::endl;} }

本来は読み込んだ画像をvector配列に変換するなどといった処理もします。

出力

cannot load : E:\CC_Ddata\circle\IMG_4544.PNG cannot load : E:\CC_Ddata\circle\IMG_4545.PNG cannot load : E:\CC_Ddata\circle\IMG_4546.PNG (省略) cannot load : E:\CC_Ddata\circle\IMG_4573.PNG ----- end -----

試したこと

サイトやteratailの似た記事を参考に以下のようなことが原因に挙げられていましたが、どれも該当しませんでした。
・パスに日本語が使われている。
・フルパスを指定していない。
・パスが間違っている。(std::filesystem::existsで確認済み)

補足情報(FW/ツールのバージョンなど)

Microsoft Visual C++ compiler 16.10.31402.337(amd64)
Qt 6.2.0 MSVC2019 64bit
CMake 3.19.2(Qt)
C++17

追記

cv::Mat img2 = cv::imread("C:\CC_Ddata\circle\IMG_4573.PNG");

のようにすればemptyにならず読み取れたので、原因は .path().string() にありそう??
パスの区切りを''や''や'/'に変更しても変わりません。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Qt

QtはGUIプログラムの開発で広く使われているクロスプラットフォーム開発のフレームワークです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Qt Creator

Qt Creatorは、Qtアプリケーションを開発するための開発統合環境(IDE)です。