使用環境(VS2015、C++、OpenCV、Windows10 64bit)
お世話になります。
私がやりたいこととしましては、フォルダ内のjpgファイルを順に読み込んでトリミングを行うというものになります。
そこで、ウェブ上の様々な方のコードを参考に書いてはみたのですが、上手く動作してくれません(ビルド自体は通りますがデバック時に例外を投げられます)。
おそらくTrimmingの引数に指定しているポインタのあたりに問題があるのかな、とは思うのですが、いかんせんポインタへの理解が浅いこともあり解決策が分かりません。
どなたかアドバイスを頂ければ幸いです。
C++
1コード 2#define _CRT_SECURE_NO_WARNINGS 3#define _USE_MATH_DEFINES 4#include<iostream> 5#include<opencv2/opencv.hpp> 6#include <string> 7#include <windows.h> 8#include <vector> 9 10using namespace std; 11using namespace cv; 12 13bool Trimming(string folderPath, vector<string> &file_names) 14{ 15 HANDLE hFind; 16 WIN32_FIND_DATA win32fd; 17 string search_name = folderPath + "\"; 18 19 hFind = FindFirstFile(search_name.c_str(), &win32fd); 20 21 if (hFind == INVALID_HANDLE_VALUE) { 22 throw std::runtime_error("file not found"); 23 return false; 24 } 25 26 /* 指定のディレクトリ以下のファイル名をファイルがなくなるまで取得する */ 27 do { 28 if (win32fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { 29 /* ディレクトリの場合は何もしない */ 30 printf("directory\n"); 31 } 32 else { 33 /* ファイルが見つかったらVector配列に保存する */ 34 file_names.push_back(win32fd.cFileName); 35 printf("%s\n", file_names.back().c_str()); 36 37 string adress = folderPath + "\" + file_names.back().c_str(); 38 Mat img_src = imread(adress, 1); 39 Rect roi(0, 0, 100, 36); 40 Mat cutImg = img_src(roi); 41 42 imwrite(adress, cutImg); 43 } 44 } while (FindNextFile(hFind, &win32fd)); 45 46 FindClose(hFind); 47 48 return true; 49} 50 51int main() 52{ 53 printf("トリミング開始\n"); 54 55 string folda = "C:\Users\ukon\Desktop\image_aga"; 56 vector<string> file = {}; 57 file[0] = "1.jpg"; 58 59 Trimming(folda, file); 60 61 printf("トリミング終了\n"); 62 63 waitKey(0); // キー入力待ち 64 return 0; 65} 66
参考
・C++でフォルダ以下のファイル一覧を取得する(https://qiita.com/tes2840/items/8d295b1caaf10eaf33ad)
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。