前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ OpenCV视频操作之图像输出文字

C++ OpenCV视频操作之图像输出文字

作者头像
Vaccae
发布于 2019-07-25 03:29:38
发布于 2019-07-25 03:29:38
4.2K00
代码可运行
举报
文章被收录于专栏:微卡智享微卡智享
运行总次数:0
代码可运行

前言

当我们视频分析时可能图像中需要有一个文字说明,OpenCV中本身也有这个API,我们就来看看OpenCV中的图像文字输出。

视频效果

函数API

void putText( Mat& img, const string& text, Point org, int fontFace,double fontScale, Scalar color, int thickness=1, int lineType=8 );

参数说明:

Mat& img:待写字的图片,我们写在img图上 const string& text:待写入的字,我们下面写入Hello Point org:第一个字符左下角坐标,我们设定在图片的Point(50,60)坐标。表示x = 50,y = 60。 int fontFace:字体类型,FONT_HERSHEY_SIMPLEX ,FONT_HERSHEY_PLAIN ,FONT_HERSHEY_DUPLEX 等等等。 double fontScale:字体大小,我们设置为2号 Scalar color:字体颜色,颜色用Scalar()表示,不懂得去百度。 int thickness:字体粗细,我们下面代码使用的是4号 int lineType:线型,我们使用默认值8.


代码演示

这次我们用的还是最开始我们用的背景消除建模的那个DEMO《C++ OpenCV视频操作之背景消除建模(BSM)-1》,在这个基础上我们加入文字输出,看看效果。

在这个例子中,因为我们有两个建模的类型,分别是MOG2和KNN,所以我们也分别做了两个不同的输出文字,一个是随我们手势实时显示,一个是固定显示位置。

随手势实时显示

这个显示的原理就是,首先根据图像寻找轮廓,然后根据找到的轮廓获取它的外接矩形,最后在矩形的启点上输出文字。

固定位置显示

固定位置显示就非常简单了,我们直接在图像上输出文字即可。

完整代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <opencv2/opencv.hpp>

int main(int agrc, char** argv)
{
  cv::VideoCapture video;
  video.open("E:/KK_Movies/test3.mp4");
  if(!video.isOpened())
  {
    printf("could not read the video....");
    getchar();
    return -1;
  }
  cv::Mat frame;

  //定义一个开操作
  cv::Mat kernel = cv::getStructuringElement(cv::MORPH_RECT,
    cv::Size(3, 3), cv::Point(-1, -1));

  //创建高斯混合显示的Mat
  cv::Mat bsmMOG2;
  cv::Ptr<cv::BackgroundSubtractor> pMOG2 = 
    cv::createBackgroundSubtractorMOG2();

  //创建KNN显示的Mat
  cv::Mat bsmKNN;
  cv::Ptr<cv::BackgroundSubtractor> pKNN =
    cv::createBackgroundSubtractorKNN();

  //创建寻找轮廓
  std::vector<std::vector<cv::Point>> contours;

  while (video.read(frame))
  {
    cv::resize(frame, frame, cv::Size(300, 600));
    imshow("srcvideo", frame);
    //运用高斯混合存放到bsmMOG2中
    pMOG2->apply(frame, bsmMOG2);

    //运用开操作去掉部分干扰
    cv::morphologyEx(bsmMOG2, bsmMOG2, cv::MORPH_OPEN, kernel);
    cv::resize(bsmMOG2, bsmMOG2, cv::Size(300, 600));

    //寻找轮廓
    cv::findContours(bsmMOG2, contours, CV_RETR_EXTERNAL,
      CV_CHAIN_APPROX_SIMPLE);
    for (int i = 0; i < contours.size(); ++i)
    {
      //判断轮廓大小,当大于1000时进入
      if(cv::contourArea(contours[i])>1000)
      {
        //获取轮廓矩形
        cv::Rect rect=cv::boundingRect(contours[i]);
        //在矩形的左上角点输出文字
        cv::putText(bsmMOG2, "MOG2", cv::Point(rect.x,rect.y),
          CV_FONT_HERSHEY_PLAIN, 2, cv::Scalar(255, 255, 255));
      }
    }
    cv::imshow("MOG2", bsmMOG2);


    //运用KNN存放到bsmKNN中
    pKNN->apply(frame, bsmKNN);
    //运用开操作去掉KNN的干扰
    cv::morphologyEx(bsmKNN, bsmKNN, cv::MORPH_OPEN, kernel);
    cv::resize(bsmKNN, bsmKNN, cv::Size(300, 600));

    //输出的文字点固定在图像的50,100的点上
    cv::putText(bsmKNN, "KNN", cv::Point(50, 100),
      CV_FONT_HERSHEY_PLAIN, 2, cv::Scalar(255, 255, 255));
    cv::imshow("KNN", bsmKNN);

    char c = cvWaitKey(20);
    if(c==27)
    {
      break;
    }

  }

  video.release();
  cvWaitKey(0);
  return 0;

}

视频中的截图

-END-

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-04-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 微卡智享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
OpenCV源码系列|背景分割
应用场景:静态摄像头统计路过的行人数量,交通摄像头提取路过的交通车辆等。 技术核心:从静态的背景中把动态的物体提取并分割。 输入视频:打开摄像头,没有物体进入(仅仅做的截图) 输出视频:手机突然进入摄像头范围内 代码实现: #include "opencv2/core.hpp" #include "opencv2/imgproc.hpp" #include "opencv2/video.hpp" #include "opencv2/videoio.hpp" #include "opencv2
用户9831583
2022/06/16
2960
OpenCV源码系列|背景分割
OpenCV中如何正确的给文字区域加上底色
点击上方蓝字关注我们 微信公众号:OpenCV学堂 关注获取更多计算机视觉与深度学习知识 显示效果 对象检测模型推理解析结果之后,经常需要在对象检测框上部添加文字类别跟其他表述文本,这样显示可以让人一目了然,非常清楚的知道各种检测类别跟自信度信息,但是这个可视化显示,OpenCV可以做的非常好,给人很直观的感觉。图示如下: 如何生成这种显示 OpenCV中有个获取字体跟文本宽高的函数,调用该函数可以获取 Size cv::getTextSize( const String
OpenCV学堂
2022/04/28
2.8K0
OpenCV中如何正确的给文字区域加上底色
Opencv-python画图基础知识
相关函数介绍 1. Point 该数据结构表示了由其图像坐标 和 指定的2D点。可定义为: Point pt; pt.x = 10; pt.y = 8; 或者 Point pt = Point(10, 8); 2. Scalar 表示了具有4个元素的数组。次类型在OpenCV中被大量用于传递像素值。 本节中,我们将进一步用它来表示RGB颜色值(三个参数)。如果用不到第四个参数,则无需定义。 我们来看个例子,如果给出以下颜色参数表达式: Scalar( a, b, c ) 那么定义的RGB颜色值为:Red =
hbbliyong
2018/06/13
1.3K0
【opencv实践】你确定真的了解寻找轮廓函数吗?【RM大符识别】
前几天师兄跟我讲了一下opencv的findContours()函数识别大符,感觉真的是妙啊!自己学的时候马马虎虎,就导致很多细节都没有领悟到,今天给大家分享一下。
周旋
2020/06/04
3.4K0
C++ OpenCV人脸图像提取
《C++ OpenCV Contrib模块LBF人脸特征点检测》文章中已经介绍了人脸特征点的检测,本篇文章是在原代码的基础上实现人脸的提取。
Vaccae
2021/03/12
1.7K0
【C++】OpenCV:红绿灯检测介绍及实现示例
OpenCV好强,能够提取红绿灯的轮廓,并根据颜色空间判断红绿,不依赖深度学习算法也能做到可用的效果/demo。
DevFrank
2024/07/24
3120
【C++】OpenCV:红绿灯检测介绍及实现示例
C++ OpenCV输出中文
以前的文章《C++ OpenCV视频操作之图像输出文字》介绍了OpenCV中的putText函数可以输出文字,但是这个函数只能输出英文,如果输入的是中文会变为乱码,今天我们就来实现OpenCV输出中文(只在windows环境下)。
Vaccae
2020/11/09
4.5K0
C++ OpenCV输出中文
学习|OpenCV图片修复函数inpaint
最近重新学习OpenCV的基础,偶然间发现了npaint的函数,于是就自己做了Demo测试了下,感觉还不错,这篇就来分享一下OpenCV的图片修复函数。
Vaccae
2019/11/07
2.5K0
学习|OpenCV图片修复函数inpaint
【OpenCV入门之十五】随心所欲绘制想要形状
画圆画点都是使用circle()函数来画,点就是圆,我们平常所说的圆只不过是半径大一点而已。
小白学视觉
2019/05/30
1.9K0
OpenCV | 二值图像分析的技巧都在这里
二值图像分析最常见的一个主要方式就是轮廓发现与轮廓分析,其中轮廓发现的目的是为轮廓分析做准备,经过轮廓分析我们可以得到轮廓各种有用的属性信息、常见的如下:
OpenCV学堂
2020/02/21
1.9K0
VC++中使用OpenCV进行形状和轮廓检测
在VC++中使用OpenCV进行形状和轮廓检测,轮廓是形状分析以及物体检测和识别的有用工具。如下面的图像中Shapes.png中有三角形、矩形、正方形、圆形等,我们如何去区分不同的形状,并且根据轮廓进行检测呢?
ccf19881030
2024/05/24
7220
VC++中使用OpenCV进行形状和轮廓检测
OpenCV4 | 如何让传统图像处理实现三十倍加速的顶级技能
一直有人在研习社问我,怎么去做OpenCV + CUDA的加速支持。其实网上用搜索引擎就可以找到一堆文章,但是其实你会发现,按照他们的做法基本都不会成功,原因是因为文章中使用的OpenCV版本太老旧、英伟达GPU的CUDA库也太久远。其实这个都不是主要原因,真实原因是OpenCV4跟之前的版本,编译CUDA的方法不一样了。所以感觉有必要自己写一遍,作为全网第一个OpenCV4 + CUDA + GPU编译与代码测试的教程给大家。希望大家都可以获得此技能,整个教程分为如下几个部分:
OpenCV学堂
2019/10/19
10.4K0
OpenCV4 | 如何让传统图像处理实现三十倍加速的顶级技能
Python中使用Opencv-python库绘制直线、矩形、圆、文本
在Python中使用Opencv-python绘制直线、矩形、圆、文本非常简单,分别使用到line、rectangle、circle、putText这几个函数,具体可以参考https://docs.opencv.org/4.9.0/d6/d6e/group__imgproc__draw.html#ga7078a9fae8c7e7d13d24dac2520ae4a2官方文档
ccf19881030
2024/05/24
4490
Python中使用Opencv-python库绘制直线、矩形、圆、文本
图像加文字与运行时间——opencv
本文转自:https://blog.csdn.net/you_big_father/article/details/90604390
vv彭
2020/12/16
9810
OpenCV DNN模块教程(四)Mask-RCNN实例分割
本文为OpenCV DNN模块官方教程的扩展,介绍如何使用OpenCV加载TensorFlow Object Detection API训练的模型做实例分割,以Mask-RCNN为例来检测缺陷。TensorFlow Object Detection API的github链接地址如下:https://github.com/tensorflow/models/tree/master/research/object_detection
Color Space
2020/10/29
1.1K0
OpenCV DNN模块教程(四)Mask-RCNN实例分割
C++ OpenCV透视变换综合练习
以前的文章《C++ OpenCV之透视变换》介绍过透视变换,当时主要是自己固定的变换坐标点,所以在想可不可以做一个通过轮廓检测后自适应的透视变换,实现的思路通过检测主体的轮廓,使用外接矩形和多边形拟合的四个最边的点进行透视变换。
Vaccae
2021/01/18
1.1K0
C++ OpenCV生成九宫格图像
这几个月一直在做Android的东西,OpenCV的Demo基本没做,正好前两天也刚下载了VS2022,正好借助新的VS2022做个简单的OpenCV图像切割成九宫格的Demo。
Vaccae
2021/12/01
1.2K0
C++ OpenCV生成九宫格图像
【OpenCV入门之九】轮廓查找和多边形包围轮廓
学习计算机视觉最重要的能力应该就是编程了,为了帮助小伙伴尽快入门计算机视觉,小白准备了【OpenCV入门】系列。新的一年文章的内容进行了很大的完善,主要是借鉴了更多大神的文章,希望让小伙伴更加容易理解。如果小伙伴觉得有帮助,请点击一下文末的“好看”鼓励一下小白。
小白学视觉
2019/06/02
1.9K0
opencv小项目练习之数独求解
对于给定的数独照片(尽可能干净整齐),进行一系列处理,提取位置和数字信息,这中间可能要用到一系列图像处理的基本算法,数字识别时初步打算用knn来做,knn对手写体的精度一般,这里要求输入应该是打印体,这样才能保证正确率,最后通过数独求解的算法算出答案。
和蔼的zhxing
2018/09/04
1.5K0
opencv小项目练习之数独求解
pyTorch入门(四)——导出Minist模型,C++ OpenCV DNN进行识别
前三章介绍了pyTorch训练的相关,我们也保存模型成功了,今天这篇就是使用C++ OpenCV的DNN模块进行手写图片的推理。
Vaccae
2022/12/29
9810
pyTorch入门(四)——导出Minist模型,C++ OpenCV DNN进行识别
相关推荐
OpenCV源码系列|背景分割
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验