帧间提取水印

http://www.opencv.org.cn/forum.php?mod=viewthread&tid=33957

视频地址

链接: http://pan.baidu.com/s/1kV5xKDh 密码: abd2   //pan,baidu.com/文章附件 test.avi

 

本帖最后由 OpenCV_Westin 于 2015-1-18 14:47 编辑

代码:
#include <opencv2\core\core.hpp>
#include <opencv2\highgui\highgui.hpp>
#include <opencv2\imgproc\imgproc.hpp>

#include <iostream>

using namespace std;
using namespace cv;

int main(int argc, char** argv)
{
        cv::VideoCapture cap("test.avi");
        if(!cap.isOpened())
        {
                cout << "Failed!" << endl;
                return -1;
        }

        Mat result,mask;
        cv::namedWindow("Result",1);
        cv::namedWindow("Frame",1);
        int i = 0;
        for(;;)
        {
                Mat frame;
                cap >> frame;
                if(!frame.data)
                {
                        cout << "Over!" << endl;
                        break;
                }

                if(i <= 30)  //看视频,自己调试确定这个值,二十几帧之后左上角那个小图才出来,所以选了30
                {
                        if(i == 30)
                        {
                                mask = frame;
                                cv::cvtColor(mask,mask,CV_BGR2GRAY);
                                imshow("Frame",frame);
                                imshow("Result",mask);
                                //waitKey();
                        }                        
                }
                else
                {
                        cv::cvtColor(frame,result,CV_BGR2GRAY);
                        cv::bitwise_and(result,mask,mask);
                        imshow("Frame",frame);
                        imshow("Result",mask);
                        //waitKey();
                        if(cv::waitKey(33) >= 0) break;
                }
                i++;
        }

        waitKey();
        return 0;
}
posted @ 2016-04-12 09:10  donaldlee  阅读(184)  评论(0编辑  收藏  举报