1. 程式人生 > 程式設計 >opencv3/C++視訊中疊加透明圖片的實現

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++視訊中疊加透明圖片的實現就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。