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);
}
OpenCV 车牌号图片生成
最新推荐文章于 2025-05-20 19:09:12 发布