c++をopencv使って勉強中なのですが、for文でパスの先にあるディレクトリ内の画像データを全部読み取るということをしたくて、いくつかのサイトを参考に途中まで書いてみたのですが書き方がわかりませんでした。
ご教授いただけるとありがたいです。
c++
1int no, no_num; 2 3for(no=0;no<no_num;no++){ 4 5 std::string path = "/Users/save_picture/outside/*.png" ,no; 6 7・・・
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
C++
1// C++17 : カレントdir.の ~.png を列挙する 2 3#include <filesystem> 4#include <iostream> 5 6namespace fs = std::filesystem; 7 8int main() { 9 for (const fs::directory_entry& ent : fs::directory_iterator(".")) { 10 fs::path fpath = ent; 11 if ( fpath.extension() == ".png" ) { 12 std::cout << fpath.string() << std::endl; 13 } 14 } 15}
投稿2021/02/13 01:12
総合スコア16612
0
ベストアンサー
はじめまして
ディレクトリの中にあるすべての画像ファイルを読むということなら
まずはディレクトリの中の画像ファイル名を拾うことから始めましょう
以下はC言語で取得する方法ですが、C++17が使える環境なら
もう少し簡単な方法があります
c++
1#include <iostream> 2#include <string> 3#include <string.h> 4#include <cstdlib> 5#include <dirent.h> 6 7 8using std::cout; 9using std::cerr; 10using std::endl; 11using std::string; 12 13 14int main(int argc, char** argv) 15{ 16 // 検索するフォルダを指定する 17 string path = "./data/"; 18 DIR *dp; 19 20 // ディレクトリのポインタを取得 21 dp = opendir(path.c_str()); 22 23 if(dp==NULL) 24 cerr << "not found directory" << endl; 25 26 // ディレクトリ内を読み込む 27 dirent *entry = readdir(dp); 28 29 // ディレクトリ内のすべての情報を一個毎に読む 30 while(entry != NULL){ 31 if(entry != NULL){ 32 33 const char *ext = strrchr(entry->d_name, '.'); 34 35 // 拡張子が正しいか比較する 36 if(strcmp(".png", ext) == 0){ 37 38 // ファイル名を取得する 39 cout << path << entry->d_name << endl; 40 41 /** 42 ここに画像を読み込む処理を追加する 43 **/ 44 } 45 } 46 entry = readdir(dp); 47 } 48}
投稿2021/02/13 07:32
総合スコア159
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
Python で
py
1path = 'Users/save_picture/outside/' + str(no) + '.png'
と書くように、整数を std::string 型に変換し結合すれば良いと思われます。
cpp
1std::string path = "Users/save_picture/outside/" + std::to_string(no) + ".png";
また他の手段として、 sprintf や std::stringstream を使う、もしくはそもそもディレクトリの走査に <filesystem> ヘッダの機能 (C++17 以降) を使う、などが挙げられそうです。
投稿2021/02/13 00:53
総合スコア209
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。