1. 程式人生 > >基於OpenCV的視訊影象組態 (6): 形狀動畫效果

基於OpenCV的視訊影象組態 (6): 形狀動畫效果

形狀效果

形狀效果:顯示目標區域位置不變,顯示內容(原始陣不變,遮蔽陣變化 -> 顯示內容變化)

enum CbwShapeDirection { // 形狀方向

    csdZoomIn = 0, // 放大

        csdZoomOut = 1 // 縮小

    };

 

enum CbwShapeType { // 形狀型別

    cstCircle = 0, // 圓

        cstRect = 1, // 方框

        cstDiamond = 2, // 菱形

        cstPlus = 3 // 加號

    };

 

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

    cv::Mat& srcMat, TRect displayRect) {

    int zoomType = MyOptionType.Items[1].CurrentValue; // 放大、縮小

    int shapeType = MyOptionType.Items[2].CurrentValue; // 型別

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

        displayRect.bottom - displayRect.top);

    double cx = wholeRect.right / 2.0, cy = wholeRect.bottom / 2.0;

    double deltaX = double(FCurrentIndex + 1) / FTotalFramesInOnePeriod * cx;

    double deltaY = double(FCurrentIndex + 1) / FTotalFramesInOnePeriod * cy;

    double startX = deltaX, startY = deltaY;

 

    if (zoomType == csdZoomOut) {

        startX = cx - deltaX;

        startY = cy - deltaY;

    }

    BYTE * pSrc = srcMat.data;

    BYTE * pDst = destMat.data;

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

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

            bool hasValueFlag = (*pSrc++ != 0);

            if (!hasValueFlag)

                * pDst = 0;

            bool inFlag = false;

            double a = (cx - startX) * 1.5, b = (cy - startY) * 1.5;

            if (shapeType == cstCircle) { // 圓

                if (a > 0 && b > 0) {

                    double v = (row - cy) * (row - cy) / (b * b) +

                        (col - cx) * (col - cx) / (a * a);

                    inFlag = (v <= 1);

                }

            }

            if (shapeType == cstRect) { // 方框

                inFlag =

                    (fabs(cx - startX) >= fabs(cx - col) && fabs(cy - startY) >=

                    fabs(cy - row));

            }

            if (shapeType == cstDiamond) { // 菱形

                if (a > 0 && b > 0) {

                    if (zoomType == csdZoomOut) {

                        a *= 2;

                        b *= 2;

                    }

                    bool lr1 = (col < (((-a) * (1 - (row - cy) / (b))) + cx));

                    bool lr2 = (col < (((-a) * (1 - (row - cy) / (-b))) + cx));

                    bool lr3 = (col < (((a) * (1 - (row - cy) / (-b))) + cx));

                    bool lr4 = (col < (((a) * (1 - (row - cy) / (b))) + cx));

                    inFlag = (!lr1 && !lr2 && lr3 && lr4);

                }

            }

            if (shapeType == cstPlus) { // 加號

                inFlag =

                    (fabs(cx - startX) > fabs(cx - col) || fabs(cy - startY) >

                    fabs(cy - row));

            }

            *pDst++ = (inFlag != (zoomType == csdZoomOut) ? 0 : 255);

        }

    return true;

}


演示效果

相關推薦

基於OpenCV視訊影象 (6) 形狀動畫效果

形狀效果 形狀效果:顯示目標區域位置不變,顯示內容(原始陣不變,遮蔽陣變化 -> 顯示內容變化) enum CbwShapeDirection { // 形狀方向 csdZoomIn = 0, // 放大 csdZoomOut =

基於OpenCV視訊影象 (4) 劈裂動畫效果

寫在前面 本系列部落格URL: 配套軟體下載地址: 配套軟體含四個可執行檔案:DrGraph.exe,YeeVingDriver.exe,YeeVingPlayer.exe,WatchDog.exe 其中, DrGraph.exe為圖形博士軟體,可進行電路

基於OpenCV視訊影象 (14)音量控制

實現程式碼  編寫的播放軟體,慢慢地有了聲音控制的需求,在網上找了一下,用Core Audio APIS 音訊應用開發即可。入門稍慢,不過用起來很簡單。整理了一個類供呼叫。 class TCbwAudioEndpointVolumeCallback; typede

基於OpenCV視訊影象 (8) 隨機線條動畫效果

隨機線條效果實現 class TCbwAnimationEffect_RandomLine : public TCbwAnimationEffect { // 隨機線 virtual bool __fastcall BuildMaskMat(cv::Mat&a

基於OpenCV視訊影象 (10) CEF瀏覽器與圖形軟體互嵌

開發者工具 CEF核心很強大,已經提供相當多的功能。 比如開發者工具,呼叫是如此的簡單。 稍微包裝一下,宣告一個屬性 __property bool ShowDevTool = { read = GetDevToolVisible, write = Se

基於OpenCV視訊影象 (2) 動畫總體

/** *@class TCbwAnimationEffect *@brief 動畫基類 * * 處理動畫基本內容 *@author DrGraph *@version 1.0 *@date 2017-10-07 *@QQ: 282397369 */ class TC

基於OpenCV的視頻 (1) 時鐘

oot 這般 ctc .cn email 定制 ima ret locked 寫在前面 本系列博客URL: http://www.cnblogs.com/drgraph http://blog.csdn.net/arwen 配套軟件下載地址: http://ww

基於OpenCV的視頻 (2) 動畫總體

tag evo odm enc 底部 direction san 基本上 界面 寫在前面 本系列博客URL: http://www.cnblogs.com/drgraph http://blog.csdn.net/arwen 配套軟件下載地址: http://w

基於OpenCV的視頻 (3)常見PPT動畫1

app 基本 rom font uil 簡單 ren .net 記錄 寫在前面 本系列博客URL: http://www.cnblogs.com/drgraph http://blog.csdn.net/arwen 配套軟件下載地址: http://www.cz

基於OpenCV影象分割

1、影象閾值化 原始碼: #include "opencv2/highgui/highgui.hpp" #include "opencv2/imgproc/imgproc.hpp" #include <iostream> using namespace std; using

基於OpenCV影象恢復

根據自適應濾波原理,設計一種可較好的保留底紋細節的自適應中值濾波器,對下圖1進行恢復(5%椒鹽噪聲),要求達到圖2的效果。 圖1 圖2 用visual studio 2012實現的程式碼如下: 特別注意的是,把要處理的圖片放在工程目錄下!!! #include<opencv2/

基於OpenCV影象形態學處理

1、形態學概述 一詞通常表示生物學的個分支,該主要研究動植形態 和結構 。 而我們影象處理中的形態學,往指是數學形態學。 最基本的形態學操作有兩種:膨脹和腐蝕 膨脹:(dilate)就是求區域性最大值的操作。從數學角度來說,膨脹或者腐蝕操作就是講影象(或影象的一部分割槽域,稱之為A)與核(稱

基於opencv影象縮放,旋轉,透視變換。

工具程式碼: #define WARPSTEPSIZE 0.2; #define RESIZESTEPSIZE 0.1; #define ROTATESTEPSIZE 10; float g_H_value = 0; float g_resize_value = 0;

基於opencv影象旋轉匹配

.h檔案 #ifndef _OPENCV_fftm_HPP_ #define _OPENCV_fftm_HPP_ #ifdef __cplusplus #include "opencv2/core.hpp" #include "opencv2/opencv.hpp" //

基於Opencv計算影象的均值和方差

實現每幅影象的每一個通道求均值和方差。 //這裡是三通道的影象    for(i=0;i<3;i++)  //求均值     {         m[i]=0;         for(x=0;x<src->height;x++)         {  

【LeetCode & 劍指offer刷題】數626. Remove Duplicates from Sorted Array

++ move locate amp ice min public mat 1.4 【LeetCode & 劍指offer 刷題筆記】目錄(持續更新中...) 26. Remove Duplicates from Sorted Array Given a s

Basler工業相機基於opencv 採集影象

本實驗在兩個部落格的基礎上實現的,首先是配置opencv http://blog.csdn.net/lili2425960/article/details/54234299 先前查了一些關於win10+opencv3.0(2.xx)+vs配置的文章,準備以此為樣本來配置

OpenCV數字影象處理十一利用分段線性化處理影象 在某些情況效果很實用

分段線性變換 分段線性變換也叫做灰度線性拉伸,常用的是分三段分線性變換。如下圖: 圖中對灰度區間[a,b]進行了擴充套件,而灰度區間[0, a]和[b, Mf]收到了壓縮。通過細心調整折線拐點的位置及控制分段直線的斜率,可對任意灰度區間進行擴充套件和壓縮。、本文就是基

Python-OpenCV 處理影象(一)基本操作 cv2

0x00. 圖片讀、寫和顯示操作 安裝好 OpenCV 之後,首先嚐試載入一張最簡單的圖片並顯示出來,程式碼示例: 第一種方式使用cv2.cv的LoadImage、ShowImage和SaveImage函式 import cv2.cv as cv # 讀圖片 image=cv.LoadImage('img

基於FPGA視訊影象處理系統設計

摘要 本報告給出一個基於FPGA+兩片DDR2組成的核心板、帶有4路視訊輸入和VGA介面的開發板進行的視訊影象採集和處理系統的設計。使用TW2867進行視訊輸入訊號的編碼,儲存到DDR2中,通過FPGA和ARM的聯合控制,通過I2C匯流排進行通訊,進行數字影