opencv两个不错的封装函数(创建按钮和显示文本)
来源:互联网 发布:哥伦比亚的倒影知乎 编辑:程序博客网 时间:2024/06/04 23:35
opencv两个不错的封装函数(创建按钮和显示文本)
在图像上显示文本(draw text)和创建按钮(draw button)
1、drawString()函数封装了opencv的putText函数和getTextSize函数,使得画显示文本更加安全,可靠。
函数接口:
Rect drawString(Mat img, string text, Point coord, Scalar color, float fontScale = 0.6f, int thickness = 1, int fontFace = FONT_HERSHEY_COMPLEX)1、img,画布
2、text,要显示的文本信息
3、coord要显示文本的坐标位置。例如Point(20,20),x,y均为正数,则从偏离左上角高20宽20像素开始画文本
Point(20,-10),x为正数,y为负数,则从偏离左20,底10,开始画文本。对于Point(-20,10),Point(-20,-20)类似。
4、fontScale,字体的缩放大小,当文本信息过多一行不能显示,则可以缩小字体
5、thickness,为字体粗细
6、fontFace,字体类型
Rect drawString(Mat img, string text, Point coord, Scalar color, float fontScale = 0.6f, int thickness = 1, int fontFace = FONT_HERSHEY_COMPLEX){//获取文本大小和基线 int baseline=0;Size textSize = getTextSize(text, fontFace, fontScale, thickness, &baseline);baseline += thickness;// 为左/右或上/下调整校正坐标if (coord.y >= 0) {//图像左上角的文本的左上角的坐标,因此按行向下移动coord.y += textSize.height;}else {//图像左下角的文本的左下角的坐标,因此从底部上来coord.y += img.rows - baseline + 1;}// 如果希望变成右侧调整if (coord.x < 0) {coord.x += img.cols - textSize.width + 1;}// 获取文本的边界矩形Rect boundingRect = Rect(coord.x, coord.y - textSize.height, textSize.width, baseline + textSize.height);// 画出平滑的文本putText(img, text, coord, fontFace, fontScale, color, thickness, CV_AA);//让用户知道文本的多大,以防他们想安排些事情return boundingRect;}
Rect drawButton(Mat img, string text, Point coord, int minWidth = 0){int B = 10;Point textCoord = Point(coord.x + B, coord.y + B);// 获取文本边界矩形Rect rcText = drawString(img, text, textCoord, CV_RGB(0,0,0));// 在文本周围画一个填充的矩形Rect rcButton = Rect(rcText.x - B, rcText.y - B, rcText.width + 2*B, rcText.height + 2*B);// 设置按钮的最小宽度if (rcButton.width < minWidth)rcButton.width = minWidth;// 创建一个半透膜的白色矩形Mat matButton = img(rcButton);matButton += CV_RGB(90, 90, 90);//画一个非透明的白色边界 rectangle(img, rcButton, CV_RGB(200,200,200), 1, CV_AA);//使用抗锯齿,画一个实际用来显示的文本drawString(img, text, textCoord, CV_RGB(10,55,20));return rcButton;}
main函数调用如下:
int main(int argc,char **argv){Mat img=imread(argv[1],1);const int b=10;string str="The most striking difference between a cat and a lie is that a cat has only 9 lives";string b_name1="cancel";string b_name2="add";string b_name3="paste";Rect b_seat1;Rect b_seat2;Rect b_seat3;drawString(img,str,Point(10,-20),Scalar(0,255,0),0.33f,1,3);//在底上20处,右10处,画文本b_seat1=drawButton(img,b_name1,Point(b,b),0);b_seat2=drawButton(img,b_name2,Point(b_seat1.x,b_seat1.height+b),b_seat1.width);b_seat3=drawButton(img,b_name3,Point(b_seat2.x,b_seat2.height+b_seat2.y),b_seat1.width);imshow("lena.jpg",img);waitKey();}
运行效果:
原文链接:http://www.csdn123.com/html/mycsdn20140110/84/8403a669ceed8e896d5c3ebc45b483b4.html
0 0
- opencv两个不错的封装函数(创建按钮和显示文本)
- Opencv中使用Rect的函数创建按钮和文字
- RichView的几个封装函数(插入文本和图片)
- loadrunner:文本检查点web_reg_find和web_find两个函数的区别
- loadrunner:文本检查点web_reg_find和web_find两个函数的区别
- loadrunner:文本检查点web_reg_find和web_find两个函数的区别
- 一个不错的JS效果:文本显示样式切换
- opencv的几个图像载入、显示和输出的函数
- 封装自定义View,创建N个按钮,按钮根据title长度Size-fit显示
- opencv、matlab查看函数的定义、封装
- Opencv 向量的一阶差分函数封装实现 功能等价于Matlab的diff函数 附:显示CvMat的函数封装
- imshow和image两个显示函数的区别
- 两个不错的网址
- 两个不错的工具
- 创建一个如下的窗体,并在窗体上放置两个按钮(button1、button2)、一个标签(label1,用于显示所选图片路径和文件名)、一个图片框(pictureBox1,用于显示所选图片)、一个打开对
- iOS 两个按钮切换显示不同状态和页面
- uploadify不能正确显示中文的按钮文本的解决办法
- 点击按钮动态的显示适当的文本
- http://blog.csdn.net/kaiwii/article/details/7823613
- 简单而有用的nohup命令
- Android Material Design之Toolbar与Palette实践
- 去除Xcode 中某类型警告
- 日经社説 20150309 課題克服し与野党が政策を競う政治へ
- opencv两个不错的封装函数(创建按钮和显示文本)
- iOS之UIButton学习【转】
- 阿里巴巴Dubbo实现的源码分析
- Android四大组件介绍
- 命令行中编译Java程序字符乱码问题
- 社説 20150309 東北の産業復興 自立支える官民連携が必要だ
- 数组-14. 数字加密(15)
- Android最新ant打包build脚本
- 利用Bamboo创建build plan-和github连接