OpenCV的随机数发生器

来源:互联网 发布:linux 修改权限命令 编辑:程序博客网 时间:2024/05/01 21:47

目标:

1、使用随机数发生器类 RNG 产生均匀分布的随机数

2、使用putText()函数在图片中添加文字

code 1;

#include "opencv2/opencv.hpp"
#include "opencv2/core/core.hpp"
#include "E:/common/OpencvLib.h"

#include <iostream>
#include <stdio.h>

using namespace std;
using namespace cv;

#define  Window_Height 400
#define  Window_Width 600
#define  NUMBER 10 //几何目标个数


//产生随机颜色
static Scalar randomColor(RNG &rng)
{
int icolor=(unsigned) rng;

return Scalar(icolor&255,(icolor>>8)&255,(icolor>>16)&255);
//return Scalar(255,255,255);

}


//绘制随机直线
int Drawing_Randn_Lines(Mat Image,char *window_name,RNG  rng)
{
int LineType=8; //线条类型
Point pt1,pt2;


for(int i=0;i<NUMBER;i++)
{
pt1.x=rng.uniform(0,Window_Height);
pt1.y=rng.uniform(0,Window_Height);


pt2.x=rng.uniform(0,Window_Height);
pt2.x=rng.uniform(0,Window_Height);


//产生随机颜色、粗细、长度的线条
line(Image,pt1,pt2,randomColor(rng),rng.uniform(1,5),LineType);


imshow(window_name,Image);


if(waitKey(1000)>=0)
{
return -1;
}


}

return 0;
}

//写入随机文本
int Displaying_random_text(Mat Image,char *window_name,RNG rng)
{
int lineType=8;

for(int i=0;i<NUMBER;i++)
{
Point org;
org.x=rng.uniform(20,Window_Height-20);
org.y=rng.uniform(20,Window_Height-20);

putText(Image,"Hello,OpenCV",org,rng.uniform(0,8),rng.uniform(0,100)*0.05+0.1,randomColor(rng),rng.uniform(0,5),lineType);
//putText(Image,"Hello,OpenCV",org,1,rng.uniform(0.1,5.0),randomColor(rng));

imshow(window_name,Image);
if(waitKey(1000)>0)
{
return -1;
}
}


return 0;
}

//文本颜色渐变效果

int  Displaying_Big_End(Mat image,char* window_name,RNG rng)
{
Size textsize=getTextSize("OpenCV,My Career",CV_FONT_HERSHEY_COMPLEX,3,5,0);
Point org((Window_Width-textsize.width)/2,(Window_Height-textsize.height)/2);
int lineType=8;

Mat image2;


for(int i=0;i<255;i=i+2)
{

/*image2是image和scalar::all(i)相减的结果,是针对每一个像素的操作,如果是三通道,怎每个通道都需要做减法操作*/
image2=image-Scalar::all(i);

putText(image2,"OpenCV,My Career",org,CV_FONT_HERSHEY_COMPLEX,1,Scalar(i,i,255),5,lineType);

imshow(window_name,image2);
if(waitKey(50)>0)
{
return -1;
}
}

return 0;
}


void  main()
{
//初始化一个背景为黑色矩阵
Mat image=Mat::zeros(Window_Height,Window_Width,CV_8UC3);
char *window_name="MyOpencv";
RNG rng;
//随机线条演示
Drawing_Randn_Lines(image,window_name,rng);

//随机文本演示
Displaying_random_text(image,window_name,rng);

//文本颜色变化
Displaying_Big_End(image,window_name,rng);

waitKey(0);

}


解释:

要想把一个文本写入图像的具体位置:必须先用getTextSize()函数,获取的文本的大小,再利用putText()函数设置文本位置在图像的原点坐标。

putText()函数的第二个参数Point org 表示图像的左下角坐标,因此假设要想把文本写到图片右上角起始位置的方法是:

Size tests=getTextSize(text,font,1,thickness,&baseline);

putText(image,text,Point(0,tests.height),font,1,Scalar(0,255,0),thickness);//左下角为坐标中心







0 0
原创粉丝点击