diff --git a/OpenCVVideoParser/OpenCVVideoParser.vcxproj b/OpenCVVideoParser/OpenCVVideoParser.vcxproj
index 3c64285..0cd321e 100644
--- a/OpenCVVideoParser/OpenCVVideoParser.vcxproj
+++ b/OpenCVVideoParser/OpenCVVideoParser.vcxproj
@@ -94,7 +94,7 @@
true
true
true
- WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
C:\Users\sigon\Downloads\opencv\build\include;%(AdditionalIncludeDirectories)
@@ -103,7 +103,8 @@
true
true
true
- C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\lib\Release;%(AdditionalLibraryDirectories)
+ C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\bin\Release;C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\lib\Release;%(AdditionalLibraryDirectories)
+ opencv_imgcodecs480.lib;opencv_videoio480.lib;opencv_video480.lib;opencv_imgproc480.lib;opencv_core480.lib;%(AdditionalDependencies)
@@ -130,7 +131,7 @@
true
true
true
- NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
+ _CRT_SECURE_NO_WARNINGS;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)
true
C:\Users\sigon\Downloads\opencv\build\include;%(AdditionalIncludeDirectories)
@@ -139,12 +140,16 @@
true
true
true
- C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\lib\Release;%(AdditionalLibraryDirectories)
+ C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\bin\Release;C:\Users\sigon\Downloads\opencv-4.8.0\opencv-4.8.0\build\lib\Release;%(AdditionalLibraryDirectories)
+ opencv_imgcodecs480.lib;opencv_videoio480.lib;opencv_video480.lib;opencv_imgproc480.lib;opencv_core480.lib;%(AdditionalDependencies)
+
+
+
diff --git a/OpenCVVideoParser/OpenCVVideoParser.vcxproj.filters b/OpenCVVideoParser/OpenCVVideoParser.vcxproj.filters
index ce0c35c..f4f6975 100644
--- a/OpenCVVideoParser/OpenCVVideoParser.vcxproj.filters
+++ b/OpenCVVideoParser/OpenCVVideoParser.vcxproj.filters
@@ -19,4 +19,9 @@
Source Files
+
+
+ Header Files
+
+
\ No newline at end of file
diff --git a/OpenCVVideoParser/main.cpp b/OpenCVVideoParser/main.cpp
index 7f598d3..c996549 100644
--- a/OpenCVVideoParser/main.cpp
+++ b/OpenCVVideoParser/main.cpp
@@ -6,6 +6,7 @@
#include
#include
#include
+#include
/*
This functions opens a video file and extracts the frames and put them into a vector of Mat(its the class for representing an img)
@@ -50,8 +51,60 @@ void save_frames(std::vector& frames, const std::string& outputDir){
}
-int main(){
- std::vectorframeData;
- extract_frames("C:/Users/sigon/Videos/test.mp4",frameData);
+#define OLC_PGE_APPLICATION
+#include "olcPixelGameEngine.h"
+using namespace olc;
+
+// Override base class with your custom functionality
+class Example : public olc::PixelGameEngine
+{
+public:
+ Example()
+ {
+ // Name your application
+ sAppName = "Example";
+ }
+
+public:
+ std::vectorframes;
+ float frameView=0;
+ bool OnUserCreate() override
+ {
+ // Called once at the start, so create things here
+ extract_frames("C:/users/sigon/Videos/test.mp4",frames);
+ return true;
+ }
+
+ void UpdateScreen(){
+ Clear(BLACK);
+ cv::Mat&targetFrame=frames[int(frameView)];
+ for(int y=0;y(cv::Point{x,y});
+ Draw(x,y,{col[2],col[1],col[0]});
+ }
+ }
+ }
+
+ bool OnUserUpdate(float fElapsedTime) override
+ {
+ // Called once per frame, draws random coloured pixels
+ if(GetKey(RIGHT).bHeld){
+ frameView+=fElapsedTime*60;
+ UpdateScreen();
+ }
+ if(GetKey(LEFT).bHeld){
+ frameView-=fElapsedTime*60;
+ UpdateScreen();
+ }
+ return true;
+ }
+};
+int main()
+{
+ Example demo;
+ if (demo.Construct(1920, 1080, 1, 1))
+ demo.Start();
+ return 0;
}
\ No newline at end of file
diff --git a/OpenCVVideoParser/olcPixelGameEngine.h b/OpenCVVideoParser/olcPixelGameEngine.h
new file mode 100644
index 0000000..e9ec87b
--- /dev/null
+++ b/OpenCVVideoParser/olcPixelGameEngine.h
@@ -0,0 +1,6695 @@
+#pragma region license_and_help
+/*
+ olcPixelGameEngine.h
+
+ +-------------------------------------------------------------+
+ | OneLoneCoder Pixel Game Engine v2.23 |
+ | "What do you need? Pixels... Lots of Pixels..." - javidx9 |
+ +-------------------------------------------------------------+
+
+ What is this?
+ ~~~~~~~~~~~~~
+ olc::PixelGameEngine is a single file, cross platform graphics and userinput
+ framework used for games, visualisations, algorithm exploration and learning.
+ It was developed by YouTuber "javidx9" as an assistive tool for many of his
+ videos. The goal of this project is to provide high speed graphics with
+ minimal project setup complexity, to encourage new programmers, younger people,
+ and anyone else that wants to make fun things.
+
+ However, olc::PixelGameEngine is not a toy! It is a powerful and fast utility
+ capable of delivering high resolution, high speed, high quality applications
+ which behave the same way regardless of the operating system or platform.
+
+ This file provides the core utility set of the olc::PixelGameEngine, including
+ window creation, keyboard/mouse input, main game thread, timing, pixel drawing
+ routines, image/sprite loading and drawing routines, and a bunch of utility
+ types to make rapid development of games/visualisations possible.
+
+
+ License (OLC-3)
+ ~~~~~~~~~~~~~~~
+
+ Copyright 2018 - 2022 OneLoneCoder.com
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ 1. Redistributions or derivations of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions or derivative works in binary form must reproduce the above
+ copyright notice. This list of conditions and the following disclaimer must be
+ reproduced in the documentation and/or other materials provided with the distribution.
+
+ 3. Neither the name of the copyright holder nor the names of its contributors may
+ be used to endorse or promote products derived from this software without specific
+ prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
+ EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT
+ SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
+ TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+
+ Links
+ ~~~~~
+ YouTube: https://www.youtube.com/javidx9
+ https://www.youtube.com/javidx9extra
+ Discord: https://discord.gg/WhwHUMV
+ Twitter: https://www.twitter.com/javidx9
+ Twitch: https://www.twitch.tv/javidx9
+ GitHub: https://www.github.com/onelonecoder
+ Homepage: https://www.onelonecoder.com
+ Patreon: https://www.patreon.com/javidx9
+ Community: https://community.onelonecoder.com
+
+
+
+ Compiling in Linux
+ ~~~~~~~~~~~~~~~~~~
+ You will need a modern C++ compiler, so update yours!
+ To compile use the command:
+
+ g++ -o YourProgName YourSource.cpp -lX11 -lGL -lpthread -lpng -lstdc++fs -std=c++17
+
+ On some Linux configurations, the frame rate is locked to the refresh
+ rate of the monitor. This engine tries to unlock it but may not be
+ able to, in which case try launching your program like this:
+
+ vblank_mode=0 ./YourProgName
+
+
+
+ Compiling in Code::Blocks on Windows
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Well I wont judge you, but make sure your Code::Blocks installation
+ is really up to date - you may even consider updating your C++ toolchain
+ to use MinGW32-W64.
+
+ Guide for installing recent GCC for Windows:
+ https://www.msys2.org/
+ Guide for configuring code::blocks:
+ https://solarianprogrammer.com/2019/11/05/install-gcc-windows/
+ https://solarianprogrammer.com/2019/11/16/install-codeblocks-gcc-windows-build-c-cpp-fortran-programs/
+
+ Add these libraries to "Linker Options":
+ user32 gdi32 opengl32 gdiplus Shlwapi dwmapi stdc++fs
+
+ Set these compiler options: -std=c++17
+
+
+
+ Compiling on Mac - EXPERIMENTAL! PROBABLY HAS BUGS
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Yes yes, people use Macs for C++ programming! Who knew? Anyway, enough
+ arguing, thanks to Mumflr the PGE is now supported on Mac. Now I know nothing
+ about Mac, so if you need support, I suggest checking out the instructions
+ here: https://github.com/MumflrFumperdink/olcPGEMac
+
+ clang++ -arch x86_64 -std=c++17 -mmacosx-version-min=10.15 -Wall -framework OpenGL
+ -framework GLUT -framework Carbon -lpng YourSource.cpp -o YourProgName
+
+
+
+ Compiling with Emscripten (New & Experimental)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
+ Emscripten compiler will turn your awesome C++ PixelGameEngine project into WASM!
+ This means you can run your application in teh browser, great for distributing
+ and submission in to jams and things! It's a bit new at the moment.
+
+ em++ -std=c++17 -O2 -s ALLOW_MEMORY_GROWTH=1 -s MAX_WEBGL_VERSION=2 -s MIN_WEBGL_VERSION=2 -s USE_LIBPNG=1 ./YourSource.cpp -o pge.html
+
+
+
+ Using stb_image.h
+ ~~~~~~~~~~~~~~~~~
+ The PGE will load png images by default (with help from libpng on non-windows systems).
+ However, the excellent "stb_image.h" can be used instead, supporting a variety of
+ image formats, and has no library dependence - something we like at OLC studios ;)
+ To use stb_image.h, make sure it's in your code base, and simply:
+
+ #define OLC_IMAGE_STB
+
+ Before including the olcPixelGameEngine.h header file. stb_image.h works on many systems
+ and can be downloaded here: https://github.com/nothings/stb/blob/master/stb_image.h
+
+
+
+ Multiple cpp file projects?
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ As a single header solution, the OLC_PGE_APPLICATION definition is used to
+ insert the engine implementation at a project location of your choosing.
+ The simplest way to setup multifile projects is to create a file called
+ "olcPixelGameEngine.cpp" which includes the following:
+
+ #define OLC_PGE_APPLICATION
+ #include "olcPixelGameEngine.h"
+
+ That's all it should include. You can also include PGEX includes and
+ defines in here too. With this in place, you dont need to
+ #define OLC_PGE_APPLICATION anywhere, and can simply include this
+ header file as an when you need to.
+
+
+
+ Ports
+ ~~~~~
+ olc::PixelGameEngine has been ported and tested with varying degrees of
+ success to: WinXP, Win7, Win8, Win10, Various Linux, Raspberry Pi,
+ Chromebook, Playstation Portable (PSP) and Nintendo Switch. If you are
+ interested in the details of these ports, come and visit the Discord!
+
+
+
+ Thanks
+ ~~~~~~
+ I'd like to extend thanks to Ian McKay, Bispoo, Eremiell, slavka, Kwizatz77, gurkanctn, Phantim,
+ IProgramInCPP, JackOJC, KrossX, Huhlig, Dragoneye, Appa, JustinRichardsMusic, SliceNDice,
+ dandistine, Ralakus, Gorbit99, raoul, joshinils, benedani, Moros1138, Alexio, SaladinAkara
+ & MagetzUb for advice, ideas and testing, and I'd like to extend my appreciation to the
+ 250K YouTube followers, 80+ Patreons, 4.8K Twitch followers and 10K Discord server members
+ who give me the motivation to keep going with all this :D
+
+ Significant Contributors: @Moros1138, @SaladinAkara, @MaGetzUb, @slavka,
+ @Dragoneye, @Gorbit99, @dandistine & @Mumflr
+
+ Special thanks to those who bring gifts!
+ GnarGnarHead.......Domina
+ Gorbit99...........Bastion, Ori & The Blind Forest, Terraria, Spelunky 2, Skully
+ Marti Morta........Gris
+ Danicron...........Terraria
+ SaladinAkara.......Aseprite, Inside, Quern: Undying Thoughts, Outer Wilds
+ AlterEgo...........Final Fantasy XII - The Zodiac Age
+ SlicEnDicE.........Noita, Inside
+ TGD................Voucher Gift
+ Dragoneye..........Lucas Arts Adventure Game Pack
+ Anonymous Pirate...Return To Monkey Island
+
+ Special thanks to my Patreons too - I wont name you on here, but I've
+ certainly enjoyed my tea and flapjacks :D
+
+
+
+ Author
+ ~~~~~~
+ David Barr, aka javidx9, (c) OneLoneCoder 2018, 2019, 2020, 2021, 2022
+*/
+#pragma endregion
+
+#pragma region version_history
+/*
+ 2.01: Made renderer and platform static for multifile projects
+ 2.02: Added Decal destructor, optimised Pixel constructor
+ 2.03: Added FreeBSD flags, Added DrawStringDecal()
+ 2.04: Windows Full-Screen bug fixed
+ 2.05: +DrawPartialWarpedDecal() - draws a warped decal from a subset image
+ +DrawPartialRotatedDecal() - draws a rotated decal from a subset image
+ 2.06: +GetTextSize() - returns area occupied by multiline string
+ +GetWindowSize() - returns actual window size
+ +GetElapsedTime() - returns last calculated fElapsedTime
+ +GetWindowMouse() - returns actual mouse location in window
+ +DrawExplicitDecal() - bow-chikka-bow-bow
+ +DrawPartialDecal(pos, size) - draws a partial decal to specified area
+ +FillRectDecal() - draws a flat shaded rectangle as a decal
+ +GradientFillRectDecal() - draws a rectangle, with unique colour corners
+ +Modified DrawCircle() & FillCircle() - Thanks IanM-Matrix1 (#PR121)
+ +Gone someway to appeasing pedants
+ 2.07: +GetPixelSize() - returns user specified pixel size
+ +GetScreenPixelSize() - returns actual size in monitor pixels
+ +Pixel Cohesion Mode (flag in Construct()) - disallows arbitrary window scaling
+ +Working VSYNC in Windows windowed application - now much smoother
+ +Added string conversion for olc::vectors
+ +Added comparator operators for olc::vectors
+ +Added DestroyWindow() on windows platforms for serial PGE launches
+ +Added GetMousePos() to stop TarriestPython whinging
+ 2.08: Fix SetScreenSize() aspect ratio pre-calculation
+ Fix DrawExplicitDecal() - stupid oversight with multiple decals
+ Disabled olc::Sprite copy constructor
+ +olc::Sprite Duplicate() - produces a new clone of the sprite
+ +olc::Sprite Duplicate(pos, size) - produces a new sprite from the region defined
+ +Unary operators for vectors
+ +More pedant mollification - Thanks TheLandfill
+ +ImageLoader modules - user selectable image handling core, gdi+, libpng, stb_image
+ +Mac Support via GLUT - thanks Mumflr!
+ 2.09: Fix olc::Renderable Image load error - Thanks MaGetzUb & Zij-IT for finding and moaning about it
+ Fix file rejection in image loaders when using resource packs
+ Tidied Compiler defines per platform - Thanks slavka
+ +Pedant fixes, const correctness in parts
+ +DecalModes - Normal, Additive, Multiplicative blend modes
+ +Pixel Operators & Lerping
+ +Filtered Decals - If you hate pixels, then erase this file
+ +DrawStringProp(), GetTextSizeProp(), DrawStringPropDecal() - Draws non-monospaced font
+ 2.10: Fix PixelLerp() - oops my bad, lerped the wrong way :P
+ Fix "Shader" support for strings - thanks Megarev for crying about it
+ Fix GetTextSizeProp() - Height was just plain wrong...
+ +vec2d operator overloads (element wise *=, /=)
+ +vec2d comparison operators... :| yup... hmmmm...
+ +vec2d ceil(), floor(), min(), max() functions - surprising how often I do it manually
+ +DrawExplicitDecal(... uint32_t elements) - complete control over convex polygons and lines
+ +DrawPolygonDecal() - to keep Bispoo happy, required significant rewrite of EVERYTHING, but hey ho
+ +Complete rewrite of decal renderer
+ +OpenGL 3.3 Renderer (also supports Raspberry Pi)
+ +PGEX Break-In Hooks - with a push from Dandistine
+ +Wireframe Decal Mode - For debug overlays
+ 2.11: Made PGEX hooks optional - (provide true to super constructor)
+ 2.12: Fix for MinGW compiler non-compliance :( - why is its sdk structure different?? why???
+ 2.13: +GetFontSprite() - allows access to font data
+ 2.14: Fix WIN32 Definition reshuffle
+ Fix DrawPartialDecal() - messed up dimension during renderer experiment, didnt remove junk code, thanks Alexio
+ Fix? Strange error regarding GDI+ Image Loader not knowing about COM, SDK change?
+ 2.15: Big Reformat
+ +WASM Platform (via Emscripten) - Big Thanks to OLC Community - See Platform for details
+ +Sample Mode for Decals
+ +Made olc_ConfigureSystem() accessible
+ +Added OLC_----_CUSTOM_EX for externalised platforms, renderers and image loaders
+ =Refactored olc::Sprite pixel data store
+ -Deprecating LoadFromPGESprFile()
+ -Deprecating SaveToPGESprFile()
+ Fix Pixel -= operator (thanks Au Lit)
+ 2.16: FIX Emscripten JS formatting in VS IDE (thanks Moros)
+ +"Headless" Mode
+ +DrawLineDecal()
+ +Mouse Button Constants
+ +Move Constructor for olc::Renderable
+ +Polar/Cartesian conversion for v2d_generic
+ +DrawRotatedStringDecal()/DrawRotatedStringPropDecal() (thanks Oso-Grande/Sopadeoso (PR #209))
+ =Using olc::Renderable for layer surface
+ +Major Mac and GLUT Update (thanks Mumflr)
+ 2.17: +Clipping for DrawLine() functions
+ +Reintroduced sub-pixel decals
+ +Modified DrawPartialDecal() to quantise and correctly sample from tile atlasses
+ +olc::Sprite::GetPixel() - Clamp Mode
+ 2.18: +Option to not "dirty" layers with SetDrawTarget() - Thanks TerasKasi!
+ =Detection for Mac M1, fix for scroll wheel interrogation - Thanks ruarq!
+ 2.19: Textual Input(of)course Edition!
+ =Built in font is now olc::Renderable
+ +EnablePixelTransfer() - Gate if layer content transfers occur (speedup in decal only apps)
+ +TextEntryEnable() - Enables/Disables text entry mode
+ +TextEntryGetString() - Gets the current accumulated string in text entry mode
+ +TextEntryGetCursor() - Gets the current cursor position in text entry mode
+ +IsTextEntryEnabled() - Returns true if text entry mode is activated
+ +OnTextEntryComplete() - Override is called when user presses "ENTER" in text entry mode
+ +Potential for regional keyboard mappings - needs volunteers to do this
+ +ConsoleShow() - Opens built in command console
+ +ConsoleClear() - Clears built in command console output
+ +ConsoleOut() - Stream strings to command console output
+ +ConsoleCaptureStdOut() - Capture std::cout by redirecting to built-in console
+ +OnConsoleCommand() - Override is called when command is entered into built in console
+ 2.20: +DrawRectDecal() - Keeps OneSketchyGuy quiet
+ +GetScreenSize()
+ +olc::Sprite::Size() - returns size of sprite in vector format
+ 2.21: Emscripten Overhaul - Thanks Moros!
+ +DrawPolygonDecal() tint overload, can now tint a polygon accounting for vertex colours
+ +Multiplicative Pixel overload
+ +v2d_generic clamp()
+ +v2d_generic lerp()
+ +GetDroppedFiles() - returns files dropped onto engine window for that frame (MSW only)
+ +GetDroppedFilesPoint() - returns location of dropped files (MSW only)
+ +Exposed OpenGL33 Loader interface so the typedefs can be shared with PGEX & user
+ +Fix OGL33 DecalStructure types - wow, how did that one get missed?? lol
+ +FillTexturedTriangle() - Software rasterizes a textured, coloured, triangle
+ +FillTexturedPolygon() - Hijacks DecalStructure for configuration
+ +olc::vf2d arguments for Sprite::Sample() functions
+ 2.22: = Fix typo on dragged file buffers for unicode builds
+ 2.23: Fixed Emscripten host sizing errors - Thanks Moros
+ Fixed v2d_generic.clamp() function
+
+ !! Apple Platforms will not see these updates immediately - Sorry, I dont have a mac to test... !!
+ !! Volunteers willing to help appreciated, though PRs are manually integrated with credit !!
+*/
+#pragma endregion
+
+#pragma region hello_world_example
+// O------------------------------------------------------------------------------O
+// | Example "Hello World" Program (main.cpp) |
+// O------------------------------------------------------------------------------O
+/*
+
+#define OLC_PGE_APPLICATION
+#include "olcPixelGameEngine.h"
+
+// Override base class with your custom functionality
+class Example : public olc::PixelGameEngine
+{
+public:
+ Example()
+ {
+ // Name your application
+ sAppName = "Example";
+ }
+
+public:
+ bool OnUserCreate() override
+ {
+ // Called once at the start, so create things here
+ return true;
+ }
+
+ bool OnUserUpdate(float fElapsedTime) override
+ {
+ // Called once per frame, draws random coloured pixels
+ for (int x = 0; x < ScreenWidth(); x++)
+ for (int y = 0; y < ScreenHeight(); y++)
+ Draw(x, y, olc::Pixel(rand() % 256, rand() % 256, rand() % 256));
+ return true;
+ }
+};
+
+int main()
+{
+ Example demo;
+ if (demo.Construct(256, 240, 4, 4))
+ demo.Start();
+ return 0;
+}
+
+*/
+#pragma endregion
+
+#ifndef OLC_PGE_DEF
+#define OLC_PGE_DEF
+
+#pragma region std_includes
+// O------------------------------------------------------------------------------O
+// | STANDARD INCLUDES |
+// O------------------------------------------------------------------------------O
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include