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;

    }

    演示效果

  • 相关阅读:
    poj 1860 Currency Exchange(最短路径的应用)
    poj 2965 The Pilots Brothers' refrigerator
    zoj 1827 the game of 31 (有限制的博弈论)
    poj 3295 Tautology (构造法)
    poj 1753 Flip Game(枚举)
    poj 2109 (贪心)
    poj 1328(贪心)
    Qt 对单个控件美化
    Qt 4基础
    Bash Shell
  • 原文地址:https://www.cnblogs.com/drgraph/p/8011117.html
Copyright © 2011-2022 走看看