zoukankan      html  css  js  c++  java
  • 基于OpenCV的视频图像组态 (8) :随机线条动画效果

    随机线条效果实现

    class TCbwAnimationEffect_RandomLine : public TCbwAnimationEffect { // 随机线

        virtual bool __fastcall BuildMaskMat(cv::Mat& destMat, cv::Mat& srcMat,

            TRect displayRect);

        BYTE * FOccurredLines;

    public:

        __fastcall TCbwAnimationEffect_RandomLine();

    };

    __fastcall TCbwAnimationEffect_RandomLine::TCbwAnimationEffect_RandomLine()

        : TCbwAnimationEffect() {

        EffectType = cetRandomLine;

        FOccurredLines = NULL;

    }

    bool __fastcall TCbwAnimationEffect_RandomLine::BuildMaskMat(cv::Mat& destMat,

        cv::Mat& srcMat, TRect displayRect) {

        bool horzFlag = (MyOptionType.Items[1].CurrentValue == 0); // 方向

        TRect wholeRect(0, 0, displayRect.right - displayRect.left,

            displayRect.bottom - displayRect.top);

        int totalLineNumber = (horzFlag ? wholeRect.bottom : wholeRect.right);

        int number = double(FCurrentIndex + 1) / FTotalFramesInOnePeriod * totalLineNumber;

        if (!FOccurredLines) {

            FOccurredLines = new BYTE[totalLineNumber];

            ZeroMemory(FOccurredLines, totalLineNumber);

        }

        int destNumber =

            number -int(double(FCurrentIndex) / FTotalFramesInOnePeriod * totalLineNumber);

        BYTE * pDst = destMat.data;

        vector<int>totalLines;

        for (int i = 0; i < totalLineNumber; ++i)

            totalLines.push_back(i);

        while (destNumber-- > 0 && totalLines.size()) {

            int n = random(totalLines.size());

            while (FOccurredLines[totalLines[n]]) {

                totalLines.erase(totalLines.begin() + n);

                n = random(totalLines.size());

            }

            FOccurredLines[totalLines[n]] = 1;

            totalLines.erase(totalLines.begin() + n);

        }

        for (int row = 0; row < destMat.rows; ++row)

            for (int col = 0; col < destMat.cols; ++col) {

                bool inFlag = (horzFlag ? FOccurredLines[row] :

                    FOccurredLines[col]);

                *pDst++ = inFlag ? 255 : 0;

            }

        if (FCurrentIndex == FTotalFramesInOnePeriod - 1) {

            delete FOccurredLines;

            FOccurredLines = NULL;

        }

        return true;

    }

    演示效果

  • 相关阅读:
    JS使用readAsDataURL读取图像文件
    python20个骚操作
    HTML标签的for属性
    进程、线程、协程理解
    mysql 深度解析auto-increment自增列"Duliplicate key"问题
    2020年MySQL数据库面试题总结(50道题含答案解析)
    如何用Redis统计独立用户访问量
    Redis中的布隆过滤器及其应用
    redis系列教程以及面试题
    大厂面试爱问的「调度算法」,20 张图一举拿下
  • 原文地址:https://www.cnblogs.com/drgraph/p/8011117.html
Copyright © 2011-2022 走看看