训练样本时遍历许多图片的技巧

在图像处理时,训练样本会读取比较多的图片,比如进行手写数字样本训练,提取样本特征时,若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\n");
		                break;
			}
                        image=~image;
			imwrite(fileout,image);

		}

	}
	duration = static_cast<double>(getTickCount())-duration;
	duration/=getTickFrequency();
	cout<<duration<<"S"<<endl;
	waitKey(27); 
	return 0; 
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值