如下所示:
大致思路:获取摄像头画面后,通过在图像上循环叠加一组背景透明的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++视频中叠加透明图片的实现就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
原文链接:https://blog.csdn.net/akadiao/article/details/78956237