1.opencv在图片中绘图常使用的几个函数

opencv中的(0,0)坐标是在图像的左上角。

cv::putText的用法:

对于cv::putText后面参数int lineType = 8, 是线型(4邻域或8邻域,默认8邻域),实际工程中我一般选择16邻域的cv::LINE_AA或者CV_AA或者直接填16,这三种填法都是一个意思。看起来平滑效果很好,不填的话默认8邻域,看起来字体有锯齿的样子,不好看。所以建议填上该参数值为16领域。
建议像下面这样组合,效果会好看些:
cv::putText(img, str, pt, cv::FONT_HERSHEY_SIMPLEX, 0.5, CV_RGB(255, 255, 0), 1, 16);
cv::FONT_HERSHEY_SIMPLEX字体类型会比 cv::FONT_HERSHEY_PLAIN字体类型默认显示的大一些,所以,通常字体尺寸设为0.5,字体就是正常大小。
字体和大小如下图所示:

一般会将 cv::getTextSize()cv::putText() 结合使用:

 cv::getTextSize()  //实际绘制文字之前,使用cv::getTextSize()接口先获取待绘制文本框的大小,以方便放置文本框。返回值为cv::Size。设返回值为size,可以通过size.width和size.height来获取文本框的宽和高.cv::putText()      //在图像上绘制文字//在Mat上画矩形矩形框,如果要填充矩形,需要把thickness设为-1。详解看后面。cv::rectangle()    //矩形,有成员变量左上角x,左上角y,weight,height,如Rect rect1(256, 256, 128, 128),这样用是构造函数;cv::Rect //定义一个2D的点:如Point point = Point(10, 8);或者 Point point;//创建一个2D点对象  point.x = 10;//初始化x坐标值  point.y = 8;//初始化y坐标值 cv::Point()       //一般作为值来设置颜色。他是一个由长度为4的数组作为元素构成的结构体,Scalar最多可以存储四个值,没有提供的值默认是0。 cv::Scalar(255, 255, 0)
//  关于cv::Scalar的更详细资料可以参考 https://blog.csdn.net/liuweiyuxiang/article/details/76929534cv::Size cv::getTextSize(const string& text,     // 待绘制的文字int fontFace,           // 字体类型 (如 cv::FONT_HERSHEY_PLAIN, cv::FONT_HERSHEY_SIMPLEX)double fontScale,       // 尺寸因子,值越大文字越大int thickness,          // 线条宽度int* baseLine);void cv::putText(cv::Mat& img,       // 待绘制的图像const string& text, // 待绘制的文字cv::Point origin,   // 文本框的左下角坐标(x,y),记住是左下角,不是左上角,要和cv::rectangle()的左上角区分开int fontFace,       // 字体类型 (如cv::FONT_HERSHEY_PLAIN, cv::FONT_HERSHEY_SIMPLEX)double fontScale,   // 尺寸因子,值越大文字越大cv::Scalar color,   // 线条的颜色(RGB)int thickness = 1,  // 线条宽度int lineType = 8,   // 线型(4邻域或8邻域,默认8邻域),选择16邻域的cv::LINE_AA或者CV_AA效果很好bool bottomLeftOrigin = false // true='origin at lower left');// 对于在图片中画矩形框的函数,C++中opencv对void cv::rectangle()重载了两种用法:
// pt1 矩形的一个顶点; pt2 矩形对角线上的另一个顶点; color 线条颜色 (RGB) 或亮度(灰度图像 )
// thickness 组成矩形的线条的粗细程度。取负值时(如 CV_FILLED)函数绘制填充了色彩的矩形。
// line_type 线条的类型。见cvLine的描述。 shift 坐标点的小数点位数。
// 两个函数的不同之处在于第二个函数把第一个函数中的两个对角线定点改为了cv::Rect。
void cv::rectangle(cv::Mat& img, cv::Point pt1, cv::Point pt2, const cv::Scalar& color, int thickness=1, int lineType=8, int shift=0)
void cv::rectangle(cv::Mat& img, cv::Rect rec, const cv::Scalar& color, int thickness=1, int lineType=8, int shift=0 )

下面通过一个示例,来看看cv::getTextSize()cv::putText()相结合的妙用:

{//创建空白图用于绘制文字
cv::Mat image = cv::Mat::zeros(cv::Size(640, 480), CV_8UC3);
//设置蓝色背景
image.setTo(cv::Scalar(100, 0, 0));//设置绘制文本的相关参数
std::string text = "Hello World!";
int font_face = cv::FONT_HERSHEY_COMPLEX;
double font_scale = 2;
int thickness = 2;
int baseline;
//获取文本框的长宽
cv::Size text_size = cv::getTextSize(text, font_face, font_scale, thickness, &baseline);//将文本框居中绘制
cv::Point origin;
origin.x = image.cols / 2 - text_size.width / 2;
origin.y = image.rows / 2 + text_size.height / 2;
cv::putText(image, text, origin, font_face, font_scale, cv::Scalar(0, 255, 255), thickness, 8, 0);//显示绘制结果
cv::imshow("image", image);
cv::waitKey(0);
return 0;
}

=================================================================

2. cv::Matcv::Rect 在一起使用的情况

// cv::Mat frame;
// cv::Rect rect;
//创建的新图像img是fram的一部分,具体的范围rect指定,此构造函数也不进行图像数据的复制操作,新图像img与frame共用图像数据。
cv::Mat img(frame, rect);  //cv::Mat::Mat(cv::Mat const&, cv::Rect_<int> const&) 这种方式构造函数创建的img,他的两个参数都不能修改,因为是const,修改后就会出错。cv::Mat img1(img2);    //拷贝构造
img1(rect);  //从img1中截取rect区域,返回cv::Mat。

=================================================================

【opencv】2.opencv绘图、视频等相关推荐

  1. python opencv读取视频没声音_python + opencv: 解决不能读取视频的问题

    博主一开始使用python2.7和Opencv2.4.10来获取摄像头图像,程序如下: cap = cv2.VideoCapture(0) ret, frame = cap.read() 使用这个程序 ...

  2. 使用OpenCV和Python生成视频条形码

    使用OpenCV和Python生成视频条形码 1. 效果图 2. 原理 2.1 步骤 2.2 项目结构 3. 源码 参考 这篇博客将演示如何使用Python + OpenCV生成视频条形码. 生成视频 ...

  3. Ubuntu下使用Anaconda安装opencv 解决无法读取视频

    Ubuntu下使用Anaconda安装opencv 最近在Ubuntu16.04下使用Anaconda安装opencv,碰到很多坑,记录备忘. cv2.VideoCapture(filename) 返 ...

  4. python通过opencv使用图片制作简单视频(亲测)

    最近在学习视频制作,但是做起来太浪费时间了,我就一直在想能否使用python等脚本实现制作视频,因为我看视频网站上很多营销号视频就是通过图片制作视频的,播放量还不错,我准备试一试. 一.目标 1.自动 ...

  5. 视频教程-opencv应用实例-实战视频教学-计算机视觉

    opencv应用实例-实战视频教学 河海大学计算机硕士毕业,现就职于南京华为研究所,从事嵌入式软件开发工作.热爱模式识别及机器学习算法. 金圣韬 ¥39.00 立即订阅 扫码下载「CSDN程序员学院A ...

  6. [OpenCV]关于opencv不能打开某些视频得问题

    opencv不能打开某些视频困扰了我好久,我一直认为是少安装了某个视频解码器,在尝试了几种解码器后,终于发现安装Xvid解码器后就可以了.它到底是什么东东?它得官方网站http://www.xvid. ...

  7. OpenCV - 计算相机和视频的帧速率FPS

    原文:OpenCV - 计算相机和视频的帧速率FPS[译] - AIUAI 原文:How to find frame rate or frames per second (fps) in OpenCV ...

  8. Python Opencv 之 简单的视频裁剪功能的实现

    Python Opencv 之 简单的视频裁剪功能的实现 目录 Python Opencv 之 简单的视频裁剪功能的实现 一.简单介绍 二.实现原理 三.注意实现 四.效果预览 五.实现步骤 这里实现 ...

  9. Windows 下令 OpenCV 支持 h.264 视频编码的方法

    引言 OpenCV 和 ffmpeg 修改 opencv_ffmepgdll 的步骤 安装 MinGW 编译 x264 编译 ffmpeg 生成 opencv_ffmpegdll 准备 生成 测试 结 ...

  10. OpenCv图像处理之图像视频摄像头读取和保存

    OpenCv图像处理之图像视频摄像头读取与保存 使用cv::imread()读取图片 使用cv::imwrite()存储图片 使用cv::VideoCapture::open()读取视频 使用cv:: ...

最新文章

  1. 【AJAX】JavaScript的面向对象
  2. 专题 15 TCP套接字编程
  3. 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean
  4. FCN网络的训练——以SIFT-Flow 数据集为例
  5. 聊一聊.NET Core结合Nacos实现配置加解密
  6. 如何只用一个小时定制一个行业AI 模型?
  7. java switch case怎么判断范围_java小白从入门到精通(基础二)
  8. y的花式写法_26个字母的花式写法,总有一个你喜欢哒
  9. 医药集采对药企有什么影响?
  10. 如何搞定 K8S 微服务自动化发布系统
  11. 【学习笔记】矩阵分解Matrix Factorization及延伸阅读
  12. 机器学习基石(林轩田)第一章 笔记与感悟总结
  13. 24 Three.js的环境光源THREE.AmbientLight
  14. 【造轮子/更新】打造一个简单的万能Excel读写工具
  15. root = Tk() 和 root = Tkinter.Tk() 区别
  16. python白月黑羽视频多线程笔记
  17. 高德、百度地图自定义底图
  18. 微信小程序开发 | 小程序开发框架
  19. 惠威试音碟高品质MP3版
  20. ASPICE-汽车软件过程改进及能力评定

热门文章

  1. mysql真的不能做搜索引擎吗?
  2. Redis数据库的应用场景介绍
  3. 金融风控实战—模型可解释之shap
  4. 数据挖掘十大经典算法之——K-Means 算法
  5. Hyperledger fabric1.4.0搭建环境
  6. RocketMQ-初体验RocketMQ(04)_使用RocketMQ Console源码搭建RocketMQ Console与基本使用
  7. mysql密码错误 mac_MAC下MYSQL5.7.17连接不上提示密码错解决步骤
  8. 分布式事务——消息最终一致性方案
  9. vb mysql 字符串转日期_VB常用函数表
  10. linux 插件 概念,服务端概念功能介绍