Opencv 在图像中插入文字
2015-07-03 10:50
309 查看
Opencv 在图像中插入文字
我要想在一个图片中插入文字,查找资料学习总结下,与大家分享,首先要初始化字体结构,然后用cvPutText()函数使用给定的字体和颜色在图像上显示文本字符串。 下面是初始化字体结构函数cvInitFont和cvPutText函数的原型及其各参数详解,代码为本人做的Opencv直方图练习代码,其中的插入字符串,仅支持英文字体。如下代码段仅仅是在vc中隐藏DOS窗口的方法,强制制定入口点,必须添加在程序开头处。但若是用system()调用系统命令,就会有黑色窗口一闪而过。
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
初始化字体结构体。
原型:void cvInitFont( CvFont* font, int font_face, double hscale,
double vscale, double shear=0,
int thickness=1, int line_type=8 );
font
被初始化的字体结构体。
font_face
字体名称标识符。只是Hershey 字体集( http://sources.isc.org/utils/misc/hershey-font.txt )的一个子集得到支持。
CV_FONT_HERSHEY_SIMPLEX - 正常大小无衬线字体。
CV_FONT_HERSHEY_PLAIN - 小号无衬线字体。
CV_FONT_HERSHEY_DUPLEX - 正常大小无衬线字体。( 比CV_FONT_HERSHEY_SIMPLEX更复杂)
CV_FONT_HERSHEY_COMPLEX - 正常大小有衬线字体。
CV_FONT_HERSHEY_TRIPLEX - 正常大小有衬线字体 ( 比CV_FONT_HERSHEY_COMPLEX更复杂)
CV_FONT_HERSHEY_COMPLEX_SMALL - CV_FONT_HERSHEY_COMPLEX 的小译本。
CV_FONT_HERSHEY_SCRIPT_SIMPLEX - 手写风格字体。
CV_FONT_HERSHEY_SCRIPT_COMPLEX - 比CV_FONT_HERSHEY_SCRIPT_SIMPLEX更复杂。
这个参数能够由一个值和可选择的CV_FONT_ITALIC字体标记合成,就是斜体字。
hscale
字体宽度。如果等于1.0f,字符的宽度是最初的字体宽度。如果等于0.5f,字符的宽度是最初的字体宽度的一半。
vscale
字体高度。如果等于1.0f,字符的高度是最初的字体高度。如果等于0.5f,字符的高度是最初的字体高度的一半。
shear
字体的斜度。当值为0时 ,字符不倾斜;当值为1.0f时,字体倾斜≈45度,等等。厚度让字母着重显示。函数cvLine用于绘制字母。
thickness
字体笔划的粗细程度。
line_type
字体笔划的类型,参见cvLine。
函数cvInitFont初始化字体结构体,字体结构体可以被传递到文字显示函数中。
cvPutText()
函数cvPutText使用给定的字体和颜色在图像上显示文本字符串。这些显示的文本由感兴趣矩形包围着。不属于指定字体的符号将被这些矩形符号替代。原型:
void cvPutText( CvArr* img, const char* text, CvPoint org, const CvFont* font,CvScalar color );
img:
输入图像
text:
要显示的字符串
org:
第一个字母左下角的坐标
font:
指向字体结构的指针
color:
文本的颜色.
示例代码:
/*示例代码:*/ //此代码是我学习Opencv直方图的代码 #include <cv.h> #include <cvaux.h> #include <opencv2\highgui\highgui_c.h> #include <opencv2\core\core_c.h> #include <iostream> #include <opencv2\opencv.hpp> #include <cstring> #include <cstdio> using namespace std; using namespace cv; #pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") int main() { IplImage *img = cvLoadImage("C:\\Fruits.jpg"); //cvvNamedWindow("原图"); //cvvShowImage("原图",img); int hist_size =255; //直方图的帧数 float range_0[] = {0,256}; //第0维数值变化范围 float * ranges[] = {range_0}; //第1维数值的变化范围 int i,bin_w; //下标号 float max_value = 0,min_value = 0; //直方图数值的max和Min int min_idx =0, max_idx =0; //对应上述max和min数值时的下标号 double mean =0,variance = 0; //用于存放平均值(mean)和变化量(variance)的变量 IplImage *pImage = NULL; IplImage *pImgGray =NULL; //将已经读入系统的图像复制一份 pImage = cvCloneImage(img); pImgGray = cvCreateImage(cvSize(pImage->width,pImage->height),IPL_DEPTH_8U,1); cvCvtColor(pImage,pImgGray,CV_BGR2GRAY); CvRect rect = cvRect(0,0,600,700); cvSetImageROI(pImgGray,rect); IplImage *histImage = cvCreateImage(cvSize(320,200),8,1); //创建一个指定尺寸的直方图,用于存放从图像获得的信息 CvHistogram *hist =cvCreateHist(1,&hist_size,CV_HIST_ARRAY,ranges,1); //计算直方图并作用到hist变量 cvCalcHist(&pImgGray,hist,0,NULL); //得到直方图中最大最小值及其标号 cvGetMinMaxHistValue(hist,&min_value,&max_value,&min_idx,&max_idx); //缩放这些最大最小值以容入图像内 cvScale(hist->bins,hist->bins,((double)histImage->height)/max_value,0); //设置所有直方图的数值为255 cvSet(histImage,cvScalarAll(255),0); //建立一个比例因子以沿宽度缩放 bin_w = cvRound((double)histImage->width/hist_size); for(i=0;i < hist_size; i++) { //把直方图画到图像中 cvRectangle(histImage,cvPoint(i*bin_w,histImage->height),cvPoint((i+1)*bin_w, histImage->height-cvRound(cvGetReal1D(hist->bins,i))), cvScalarAll(0),-1,8,0); //得到当前数值 float *bins = cvGetHistValue_1D(hist,i); //增加均值 mean += bins[0]; } //均值计算完毕 mean /= hist_size; //有了均值后就可以计算变化量了 for(i=0;i <hist_size;i++) { float * bins = cvGetHistValue_1D(hist,i); variance += pow((bins[0]-mean),2); } //变化量计算完毕 variance /= hist_size; //创建窗口,显示图像 cvNamedWindow("Original",0); cvShowImage("Original",pImage); cvNamedWindow("Gray",0); cvShowImage("Gray",pImgGray); CvFont * pfont = new CvFont;//CV_FONT_HERSHEY_SIMPLEX cvInitFont(pfont,CV_FONT_HERSHEY_SIMPLEX,0.5F,0.5F,1,2); string Result = "Histogram Mean:"; char buffer[30]; sprintf_s(buffer,"%f",mean); string str=buffer; Result += str + "\n"; cvPutText(histImage,Result.c_str(),cvPoint(20,80),pfont,CV_RGB(0,100,100)); cvNamedWindow("Histogram",0); cvShowImage("Histogram",histImage); cvWaitKey(0); delete pfont; cvReleaseImage(&histImage); cvReleaseImage(&pImgGray); cvDestroyWindow("Original"); cvDestroyWindow("Gray"); cvDestroyWindow("Histogram"); }
相关文章推荐
- linux PIE 程序
- 利用Docker建立服务器和docker容器的监视系统
- Linux下区分物理CPU、逻辑CPU和CPU核数
- 论 __lookup_machine_type的消失(Linux-3.0 ARMv7)
- Linux中tail命令使用
- Linux 命令 sudo
- Linux内核编译测试
- shell脚本收藏
- linux more和less的用法
- 经验分享:linux 下 制作PHP扩展出现的问题 Module compiled with module API=20090626
- 服务端用system()执行shell命令获取执行结果(排除signal影响)
- Hadoop全分布环境配置过程
- ecshop设置一个子类对应多个父类并指定跳转url的修改方法
- 双拼告捷,7月初.top域名注册总量破16.6万!
- opencv图像求差的绝对值cvAbsDiff和形态学开运算cvMorphologyEx
- 简介Nginx中的location匹配规则
- Linux 服务器安全技巧
- Linux目录结构
- 系统架构师操作系统笔记
- linux shell 命令