サンプルを訓練するときに多くの画像を巡るテクニック

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
 
 
ソース:
#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; }