第二课:使用C++实现视频去水印

目录

1.功能概述

2.实现步骤

2.1.导入OpenCV库

2.2.读入视频文件并初始化视频码流

2.3.对每一帧图像进行水印检测

2.4.对处理后的每一帧图像进行合并,重新生成视频文件

3.完整代码如下

4.参考

5.实现效果

6.去除水印的几种软件

6.1.用在线去除视频水印的方法去除水印

6.2.用AE专业剪辑工具来去除视频水印

6.3.用美图秀秀p图工具来去除视频水印


1.功能概述

        对视频进行去水印的程序需要使用计算机视觉技术,需要结合图像处理和视频处理两个方面进行实现。

以下是简单的步骤:

  1. 读入视频文件并分离出每一帧图像。

  2. 对每一帧图像进行水印检测,找出水印所在的区域。

  3. 针对水印的特定位置,使用图像处理方法进行覆盖或删除。

  4. 对处理后的每一帧图像进行合并,重新生成视频文件。

2.实现步骤

        这里提供一种简单的方法用于去除视频中的水印:

2.1.导入OpenCV库

2.2.读入视频文件并初始化视频码流

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

int main(int argc, char* argv[]) {
    VideoCapture cap(argv[1]);  // 读入视频文件
    if(!cap.isOpened()){
        std::cout << "Cannot open the video file" << std::endl;
        return -1;
    }
    double fps = cap.get(CV_CAP_PROP_FPS);  // 获取视频的帧率
    int width = cap.get(CV_CAP_PROP_FRAME_WIDTH);  // 获取视频的宽度
    int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);  // 获取视频的高度
    int num_frames = cap.get(CV_CAP_PROP_FRAME_COUNT); // 获取视频的总帧数

    // 初始化视频编码器
    VideoWriter writer("output.avi", CV_FOURCC('M','J','P','G'), fps, 
                       Size(width, height), true);
    if (!writer.isOpened()){
        std::cout << "Could not open output video file" << std::endl;
        return -1;
    }
}

        这里可以使用不同的算法进行水印检测,例如基于颜色、形状和大小等特征的检测方法。然后,确定水印的位置和大小。


2.3.对每一帧图像进行水印检测

Mat frame, gray, thresh;
while(cap.read(frame)){
    // 将原始图像转化为灰度图像
    cvtColor(frame, gray, CV_BGR2GRAY); 
    // 对灰度图像进行阈值处理
    threshold(gray, thresh, 150, 255, THRESH_BINARY); 
    // 对二值化图像进行形态学操作,如腐蚀、膨胀等
    // ...

    // 通过算法找到水印的位置和大小
    // ...

    // 在水印位置放置一个遮挡层,用于遮盖水印
    rectangle(frame, watermark_roi, Scalar(0, 0, 0), -1); 
}

2.4.对处理后的每一帧图像进行合并,重新生成视频文件

writer.write(frame); // 将修改后的帧写回视频文件

3.完整代码如下

#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main(int argc, char* argv[]) {
    VideoCapture cap(argv[1]);  // 读入视频文件
    if(!cap.isOpened()){
        std::cout << "Cannot open the video file" << std::endl;
        return -1;
    }
    double fps = cap.get(CV_CAP_PROP_FPS);  // 获取视频的帧率
    int width = cap.get(CV_CAP_PROP_FRAME_WIDTH);  // 获取视频的宽度
    int height = cap.get(CV_CAP_PROP_FRAME_HEIGHT);  // 获取视频的高度
    int num_frames = cap.get(CV_CAP_PROP_FRAME_COUNT); // 获取视频的总帧数

    // 初始化视频编码器
    VideoWriter writer("output.avi", CV_FOURCC('M','J','P','G'), fps, 
                       Size(width, height), true);
    if (!writer.isOpened()){
        std::cout << "Could not open output video file" << std::endl;
        return -1;
    }

    Mat frame, gray, thresh;
    while(cap.read(frame)){
/**此处是逐帧处理,对每一帧进行去水印处理,参考本专栏第一课:使用C++实现图片去水印**/
        //转换为灰度图像
        Mat gray;
        cvtColor(frame, gray, COLOR_BGR2GRAY);

        //二值化处理
        Mat binary;
        threshold(gray, binary, 50, 255, THRESH_BINARY);

        //形态学操作,提取水印区域
        Mat kernel = getStructuringElement(MORPH_RECT, Size(5, 5));
        morphologyEx(binary, binary, MORPH_CLOSE, kernel);

        //显示水印区域
        //imshow("水印区域", binary);
        //waitKey(0);

        //创建空白图像
        Mat result = Mat::zeros(image.size(), image.type());

       //利用原始图像和水印区域进行重构
       for (int i = 0; i < image.rows; i++) {
          for (int j = 0; j < image.cols; j++) {
              if (binary.at<uchar>(i, j) == 0) {
                  result.at<Vec3b>(i, j) = image.at<Vec3b>(i, j);
              }
          }
      }

      //显示去除水印后的图像
      //imshow("去除水印后的图像", result);
      //waitKey(0);
/*****************************************************************************/

        writer.write(result); // 将修改后的帧写回视频文件
    }

    cap.release();
    writer.release();
    return 0;
}

需要注意的是,这种简单的方法只适用于水印比较固定的场景。对于水印位置和大小变化较大的情况,需要使用更复杂的算法进行检测和处理。

4.参考

第一课:使用C++实现图片去水印_smartvxworks的博客-CSDN博客

5.实现效果

        待更新。。。

6.去除水印的几种软件

        如今,短视频的制作和分享已经成为一种日常的活动,许多短视频制作者和分享者都希望他们的视频能够被正确的认可。然而,有时候,短视频的创作者会在视频中添加一些水印图标,以此来确保短视频的版权保护。这种水印图标可能会影响视频的质量,并降低观看者的观赏体验。因此,去除短视频中的水印是很有必要的。

        那么现在有什么比较好用的去除视频水印的方法呢?如今随着软件技术的不断发展,去除视频水印现在也不是很难的问题了,现在有很多去除视频水印的方法,这里我们就来说一说常见的比较好用的三种去除视频水印的方法。

6.1.用在线去除视频水印的方法去除水印

详细操作步骤:

        第一步:首先我们需要把视频的链接复制下来,如果我们是要去除某音或者某手的短视频水印,我们就可以在视频播放页面点击分享按钮,就可以把视频的链接复制下来了。

        第二步:复制视频的链接后,我们要想有效地抹去视频中的水印,自然就需要一款高效的去水印工具。这些工具以一键方式去除视频水印,因此选择一款稳定可靠、操作简便的视频去水印工具显得尤为重要,只有这样,才能确保去水印后的视频质量。

        第三步:找到你想要用来去除视频水印的工具后,访问它的去水印功能页面,将视频链接粘贴至该页面,然后按下去除水印的按钮。等待几秒钟后,视频的水印就成功的去除掉了。如果视频较短,只需几秒钟就可以完成去水印操作,若视频时长较长,就需要等待更长的时间。最后,点击保存视频,即可将去水印后的视频保存至个人相册中。

6.2.用AE专业剪辑工具来去除视频水印

详细操作步骤:

        第一步,打开AE,然后将需要处理的视频文件拖放到工程区中,然后将其添加到时间轴中。

        第二步,点击AE界面上的“合成”菜单,找到“调整”选项,点击后会出现一个调整面板,在此面板中可以看到水印图像。

        第三步,在此面板中,可以找到“模糊”选项,点击此选项,就可以给水印图像添加模糊效果,从而达到去除水印的效果。

        第四步,调整模糊效果的程度,以达到最佳的去除水印效果。

        第五步,点击合成菜单中的“输出”选项,设置输出的文件格式、路径等,然后点击“渲染”按钮,即可完成去除视频水印的操作。

6.3.用美图秀秀p图工具来去除视频水印

详细操作步骤:

        第一步:首先,打开美图秀秀,点击“文件”,在弹出的菜单中点击“打开”,然后选择要去除水印的视频文件。接着,点击工具栏上的“去除水印”图标,美图秀秀会自动识别视频中的水印,并去除视频中的水印。等待一段时间之后,视频中的水印就会被清除。

        第二步:点击工具栏上的“保存”图标,美图秀秀会有提示框要求用户输入新的文件名,输入文件名后,点击“确定”,就可以保存去除水印后的视频文件了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smartvxworks

创造不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值