2016-04-13 9 views
-4

OpenCv 3.0を使用して、私は画像を持っているので、トレーニング用に80%、テスト用に20%を無作為に読みます。 0とC++。 お願いします。 イメージは同じフォルダにあります。OpenCv 3.0.0でパーセンテージを使ってランダムに一部の画像を読む

+0

"glob"を使用して、すべての画像のパスを含む文字列のベクトルを取得します。ランダムにシャッフルしてイメージの必要な数をロードする – Miki

+0

私は自分のイメージのすべての名前を読み、私はそれをロードするよりもファイルに入れて、今はトレーニングのためにその80%しかし、拳だけではない。 – nadjet

+0

私は私のリストのサイズの80%をどうやって刺すことができますか?そして、ランダムにシャッフルとパーセンテージを含める必要があります。 – nadjet

答えて

0

あなたがすることができます

  • は、OpenCVのglob機能で指定したフォルダ内のすべてのファイルを読み込みます。あなたはシャッフルベクトル

  • の最初のXX%の名があなたのイメージ

  • で何かするだけキープ

  • ファイル名のベクトル
  • std::random_shuffle

    std::vector<std::string>にすべてのファイル名を保存します

コード:

#include <opencv2/opencv.hpp> 
#include <vector> 
#include <string> 
#include <algorithm> 

int main() 
{ 
    // Read all .png files from the specified folder 
    std::string folder = "D:/SO/img/*.png"; 
    std::vector<std::string> filenames; 
    cv::glob(folder, filenames); 

    // Random shuffle 
    std::random_shuffle(filenames.begin(), filenames.end()); 

    // Keep 80% 
    float how_many = 0.80; 
    size_t N = filenames.size() * how_many; 

    // Do something with N random images 
    for (size_t i = 0; i < N; ++i) 
    { 
     // Load and show image 
     cv::Mat3b img = cv::imread(filenames[i]); 
     cv::imshow("Img", img); 
     cv::waitKey(1); 
    } 

    return 0; 
} 
+0

非常に良い、ありがとう、私はあなたの助けにとてもうれしいです。今、私は反復(私は列車に使用される画像を意味し、テストに使用されていないことを意味する)なしで、テストパートの残りの画像(20%)をどのように読み取ることができますか教えてください。 please – nadjet

+0

インデックス 'N'の画像を' filenames.size() 'に使うだけです。そして、C++がどのように動作するか少し調べてみてください。 – Miki

+0

verryたくさんありがとう、私はそれをしました。 – nadjet

関連する問題