随机负样本生成器

做图像训练经常需要正负样本,这个代码用来从图片库中随机获取负样本图片,随机生成负样本后请记得简单看一下,以免不小心裁到正样本(虽然概率很低),如果发现裁减到正样本请记得手动删除

 

#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
#include 
#include 
#include 
#include 
#include 
#include
#include
#include 
#include
#include
#include
#define N 12
using namespace std;
using namespace cv;

int *GetRandomArray(void)
{//产生N个100以内的随机数
	int *p = (int *)malloc(N * sizeof(int));
	memset(p, 0, sizeof(N * sizeof(int)));
	int i, j, flag, num;
	srand(time(0));
	for (i = 0; i < N; ++i)
	{
		num = rand() % 98 + 1;
		flag = 1;
		for (j = 0; j < i; ++j)
		{
			if (num == *(p + j))
			{
				flag = 0;;
				break;
			}
		}
		if (flag) *(p+i) = num;
		else --i;
	}
	return p;
}
int _tmain(void)
{//随机样本生成器,每张图片上生成6个随机的样本
	string Src_Path = "D:\\图片库\\";//图片名要先自行初始化为1.jpg,2.jpg 等
	string Sample_Path = "D:\\随机样本\\";
	int Src_Num = 110;//图片库中图片个数
	char SrcImgName[256];
	char SampleImgName[256];
	int Sample_Index = 1;
	for (int Src_Index = 1; Src_Index <= Src_Num; Src_Index++)
	{
		memset(SrcImgName, '\0', 256 * sizeof(char));
		sprintf_s(SrcImgName, "%d.jpg", Src_Index);
		string Img_Path = Src_Path + SrcImgName;
		Mat Img = imread(Img_Path);
		if (Img.data == NULL)
		{
			printf("Failed to read the img %s !\n", Img_Path);
			system("pause");
			Src_Index++;
			continue;
		}
		Mat Sample;
		int *pRandom = NULL;
		pRandom = GetRandomArray();
		for (int i = 0; i < N; i = i + 2)
		{
			Sample = Img(Rect(min((int)(*(pRandom + i) * Img.cols / 100), Img.cols - 110), min((int)(*(pRandom + i + 1) * Img.rows / 100), Img.rows - 180), 110, 180));
			//此处可以修改生成负样本的 大小
			memset(SampleImgName, '\0', 256 * sizeof(char));
			sprintf_s(SampleImgName, "%d.jpg", Sample_Index);
			string SampleImg_Path = Sample_Path + SampleImgName;
			char SampleImg[1024];
			strcpy_s(SampleImg, SampleImg_Path.c_str());
			IplImage qImg;
			qImg = IplImage(Sample);
			cvSaveImage(SampleImg, &qImg);
			Sample_Index++;
		}
		printf("Succeed to produce %d smaples.Total smaples:%d.\n", N/2, Sample_Index - 1);
	}
	printf("Produced %d samples.\n", Sample_Index - 1);
	return 0;
}

喜欢本文请打赏,一毛两毛也是个意思,么么哒
支F宝账号:[email protected]

你可能感兴趣的:(随机负样本生成器)