サンプルを訓練するときに多くの画像を巡るテクニック
1672 ワード
画像処理では,訓練サンプルが比較的多くの画像を読み取ることができ,例えば手書きデジタルサンプル訓練を行い,サンプル特徴を抽出する場合,0から9にそれぞれ100個のサンプルがあれば,1000枚の画像を読み取る必要がある.
各ピクチャの名前を数字で命名する、例えば0数字のサンプルファイル名が000である.bmp,001.bmp,002.bmp,...,099.bmpは、ループを介して画像を容易に読み取ることができる.
例えばフォルダocrnumberに1000個のデジタルサンプルがあり、それらを読み取り、反転し、ファイル名を0_に変更します.00.bmp,0_01.bmp,0_02.bmp,...,0_99.bmp
ソース:
各ピクチャの名前を数字で命名する、例えば0数字のサンプルファイル名が000である.bmp,001.bmp,002.bmp,...,099.bmpは、ループを介して画像を容易に読み取ることができる.
例えばフォルダocrnumberに1000個のデジタルサンプルがあり、それらを読み取り、反転し、ファイル名を0_に変更します.00.bmp,0_01.bmp,0_02.bmp,...,0_99.bmp
ソース:
#include <iostream>
#include <opencv2/opencv.hpp>
using namespace std;
using namespace cv;
int main( )
{
double duration;
duration = static_cast<double>(getTickCount());
char file_in_path[255];
sprintf(file_in_path,"ocrnumber/");
char file_out_path[255];
sprintf(file_out_path,"ocr_bmp/");
char filein[255];
char fileout[255];
Mat image;
for (int i=0;i<10;i++)
{
for (int j=0;j<100;j++)
{
if (j<10)
{
sprintf(filein,"%s%d/%d0%d.pbm",file_in_path,i,i,j);// 0
//sprintf(fileout,"%s%d/%d_0%d.bmp",file_out_path,i,i,j);// _0
sprintf(fileout,"%s%d/%d0%d.bmp",file_out_path,i,i,j);// 0
}
else
{
sprintf(filein,"%s%d/%d%d.pbm",file_in_path,i,i,j);
//sprintf(fileout,"%s%d/%d_%d.bmp",file_out_path,i,i,j);
sprintf(fileout,"%s%d/%d%d.bmp",file_out_path,i,i,j);
}
image=imread(filein,0);
if (!image.data)
{
printf("error
");
break;
}
image=~image;
imwrite(fileout,image);
}
}
duration = static_cast<double>(getTickCount())-duration;
duration/=getTickFrequency();
cout<<duration<<"S"<<endl;
waitKey(27);
return 0;
}