OpenCV 车牌号图片生成

int cvAdd4cMat(cv::Mat &dst, cv::Mat &scr, double scale)  
{  
	if (dst.channels() != 4 || scr.channels() != 4)  
	{  
		return true;  
	}  
	if (scale < 0.01)  
		return false;  
	std::vector<cv::Mat>scr_channels;  
	std::vector<cv::Mat>dstt_channels;  
	split(scr, scr_channels);  
	split(dst, dstt_channels);  
	CV_Assert(scr_channels.size() == 4 && dstt_channels.size() == 4);  
 
	if (scale < 1)  
	{  
		scr_channels[3] *= scale;  
		scale = 1;  
	}  
	for (int i = 0; i < 3; i++)  
	{  
		dstt_channels[i] = dstt_channels[i].mul(255.0 / scale - scr_channels[3], scale / 255.0);  
		dstt_channels[i] += scr_channels[i].mul(scr_channels[3], scale / 255.0);  
	}  
	merge(dstt_channels, dst);  
	return true;  
} 
char* srv_cfgpath=".";

void gen_licenseplate(char* numbers)
{

	if(numbers[0]== 0x0)
	{
		char filename[1024];
		snprintf(filename, 1024, "%s/%s/%s", srv_cfgpath,SRV_CAR_MODEL_PATH,
			 "licenseplate.bmp");
		cv::Mat zeroMat(cv::Size(100,50),CV_8UC4,cv::Scalar(0,0,0,0));
		cv::imwrite(filename,zeroMat);
		return;
	}
	char bg_imgpath[1024];
	snprintf(bg_imgpath, 1024,"%s/%s",srv_cfgpath,"Font/bg.png");
	
	
	
	//printf("bg_imgpath:%s\n",bg_imgpath);
	cv::Mat bgMat = cv::imread(bg_imgpath, CV_LOAD_IMAGE_UNCHANGED);

	char abbr[10];
  	sprintf(abbr,"%#04x\n",numbers[0]);
	abbr[4]='\0';
	char province_imgpath[1024];
	snprintf(province_imgpath, 1024,"%s/%s/%s%s",srv_cfgpath,"Font/province_code",abbr,".png"); 
	//printf("province_imgpath:%s\n",province_imgpath); 
	cv::Mat provinceMat = cv::imread(province_imgpath, CV_LOAD_IMAGE_UNCHANGED);
	cv::Mat p_w=bgMat(cv::Rect(15, 25, 45, 90));
	cvAdd4cMat(p_w,provinceMat,1);
	int word_offset[7]{69,161,213,265,317,369,421};
	for(int i=0;i<7;i++)
	{
		char word[10];
  		sprintf(word,"%#04x\n",numbers[i+1]);
		word[4]='\0';  
		char word_imgpath[1024];
		snprintf(word_imgpath, 1024,"%s/%s/%s%s",srv_cfgpath,"Font/word_code",word,".png"); 
		//printf("word_imgpath:%s\n",word_imgpath); 
		cv::Mat wordMat = cv::imread(word_imgpath, CV_LOAD_IMAGE_UNCHANGED);
		cv::resize(wordMat,wordMat,cv::Size(43,90));
		cv::Mat bgRect=bgMat(cv::Rect(word_offset[i], 25, 43, 90));
		cvAdd4cMat(bgRect,wordMat,1);
	}
	char filename[1024];
	snprintf(filename, 1024, "%s/%s/%s", srv_cfgpath,SRV_CAR_MODEL_PATH,
					 "licenseplate.bmp");
	cv::imwrite(filename,bgMat);
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值