opencv3/C++视频中叠加透明图片的实现

 更新时间:2019年12月10日 15:05:56   作者:阿卡蒂奥  
今天小编就为大家分享一篇opencv3/C++视频中叠加透明图片的实现,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

如下所示:

大致思路:获取摄像头画面后,通过在图像上循环叠加一组背景透明的PNG图片,在图像上产生类似GIF的动图效果。

#include<opencv2/opencv.hpp>
using namespace cv;

//PNG透明图片叠加到视频
int main()
{
  Mat frame;
  VideoCapture capture;
  capture.open(0);
  if(!capture.isOpened())
  {
    printf("can not open the camear......\n");
    return -1;
  }
  namedWindow("mask", CV_WINDOW_AUTOSIZE);
  namedWindow("output", CV_WINDOW_AUTOSIZE);
  while (capture.read(frame))
  {
    //翻转摄像头图像
    flip(frame, frame, 1);
    Mat image = frame;   
    for (int i = 1; i < 11; i++)
    {
      char filename[100];
      sprintf(filename,"E:/image/image/00/%d.PNG",i);
      //灰度图
      Mat grayPng = imread(filename,0);      
      threshold(grayPng,grayPng,180,255,CV_THRESH_BINARY);
      //掩模反色
      Mat mask = 255 - grayPng; 
      imshow("mask",mask);
      //读取背景透明的PNG图像
      Mat png = imread(filename);
      Mat imROI;
      imROI = image(Rect(200,20,png.cols,png.rows));
      png.copyTo(imROI,mask);
      imshow("output",image);
      //替换新图
      image = frame;
      waitKey(10);
    }

  }
  waitKey();

  return 0;
}

导入的PNG图片为:

以上这篇opencv3/C++视频中叠加透明图片的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • C 语言结构体的使用方法

    C 语言结构体的使用方法

    这篇文章主要介绍了C 语言结构体的使用,文章介绍了结构体定义的多种类型,想具体了解的朋友请看下面文章的内容
    2021-09-09
  • C++详细实现完整图书管理功能

    C++详细实现完整图书管理功能

    随着网络技术的高速发展,计算机应用的普及,利用计算机对图书馆的日常工作进行管理势在必行,本篇文章涵盖一个图书管理系统的全部实现代码,大家可以查缺补漏,提升水平
    2022-05-05
  • C语言fillpoly函数详解

    C语言fillpoly函数详解

    在C语言中,fillpoly函数的功能是画一个多边形,并且把多边形填充。填充边框所定义的多边形的内部。fillpoly 函数的用法:void far fillpoly(int numpoints, int far *polypoints);。
    2015-10-10
  • 使用C# 判断给定大数是否为质数的详解

    使用C# 判断给定大数是否为质数的详解

    本篇文章是对使用C#判断给定大数是否为质数的方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • c++11中关于std::thread的join的详解

    c++11中关于std::thread的join的详解

    这篇文章主要介绍了c++11中关于std::thread的join详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • 简单说说STL的内存管理

    简单说说STL的内存管理

    <STL 源码剖析>将其描述为空间配置器,理由是allocator可以将其它存储介质(例如硬盘)做为stl 容器的存储空间。由于内存是allocator管理的主要部分,因此,本文以STL内存管理为出发点介绍allocator
    2013-09-09
  • C语言全部内存操作函数的实现详细讲解

    C语言全部内存操作函数的实现详细讲解

    这篇文章主要介绍了C语言全部内存操作函数的实现详细讲解,作者用图文代码实例讲解的很清晰,有感兴趣的同学可以研究下
    2021-02-02
  • C语言实现小型电子词典

    C语言实现小型电子词典

    这篇文章主要为大家详细介绍了C语言实现小型电子词典,用户可以进行英译汉、汉译英等功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • 如何在C++中实现按位存取

    如何在C++中实现按位存取

    实现紧凑存取,不是按一个字节一个字节地存取,而是按位存取,本文就是介绍了如何在C++中实现按位存取,需要的朋友可以参考下
    2015-07-07
  • C++ STL中的常用遍历算法分享

    C++ STL中的常用遍历算法分享

    这篇文章主要为大家详细介绍了C++ STL中两个常用的遍历算法,文中的示例代码讲解详细,具有一定的学习与借鉴价值,感兴趣的小伙伴可以参考一下
    2022-12-12

最新评论