Change background subtraction algorithm
This commit is contained in:
parent
cdd4148156
commit
4b0d468c4f
@ -1,4 +1,4 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup Label="ProjectConfigurations">
|
||||
<ProjectConfiguration Include="Debug|Win32">
|
||||
@ -180,8 +180,8 @@
|
||||
<PostBuildEvent />
|
||||
</ItemDefinitionGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\bpRecognizer.cpp" />
|
||||
<ClCompile Include="src\main.cpp" />
|
||||
<ClCompile Include="src\ofApp.cpp" />
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxGui\src\ofxBaseGui.cpp" />
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxGui\src\ofxButton.cpp" />
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxGui\src\ofxColorPicker.cpp" />
|
||||
@ -199,8 +199,10 @@
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxOpenCv\src\ofxCvHaarFinder.cpp" />
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxOpenCv\src\ofxCvImage.cpp" />
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxOpenCv\src\ofxCvShortImage.cpp" />
|
||||
<ClCompile Include="src\ofApp.cpp" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="src\bpRecognizer.h" />
|
||||
<ClInclude Include="src\ofApp.h" />
|
||||
<ClInclude Include="..\..\of_v0.11.2_vs2017_release\addons\ofxGui\src\ofxBaseGui.h" />
|
||||
<ClInclude Include="..\..\of_v0.11.2_vs2017_release\addons\ofxGui\src\ofxButton.h" />
|
||||
|
@ -1,9 +1,6 @@
|
||||
<?xml version="1.0"?>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ItemGroup>
|
||||
<ClCompile Include="src\ofApp.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\main.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
@ -64,6 +61,12 @@
|
||||
<ClCompile Include="..\..\of_v0.11.2_vs2017_release\addons\ofxOpenCv\src\ofxCvShortImage.cpp">
|
||||
<Filter>addons\ofxOpenCv\src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\ofApp.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="src\bpRecognizer.cpp">
|
||||
<Filter>src</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="src">
|
||||
@ -1142,6 +1145,9 @@
|
||||
<ClInclude Include="..\..\of_v0.11.2_vs2017_release\addons\ofxOpenCv\libs\opencv\include\opencv2\world.hpp">
|
||||
<Filter>addons\ofxOpenCv\libs\opencv\include\opencv2</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="src\bpRecognizer.h">
|
||||
<Filter>src</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ResourceCompile Include="icon.rc" />
|
||||
|
30
beerpong/src/bpRecognizer.cpp
Normal file
30
beerpong/src/bpRecognizer.cpp
Normal file
@ -0,0 +1,30 @@
|
||||
#include "bpRecognizer.h"
|
||||
|
||||
|
||||
void bpRecognizer::update(ofxCvGrayscaleImage image, int video_width, int video_height) {
|
||||
//subtracted.absDiff(image, background);
|
||||
|
||||
subtracted.allocate(video_width, video_height);
|
||||
for (int i = 0; i < video_width * video_height; i++)
|
||||
{
|
||||
subtracted.getPixels()[i] = image.getPixels()[i] > background.getPixels()[i] + threshhold ? 255 : 0;
|
||||
}
|
||||
|
||||
binarized = subtracted;
|
||||
//binarized.threshold(threshhold);
|
||||
|
||||
contourFinder.findContours(
|
||||
binarized,
|
||||
10,
|
||||
video_height * video_width / 10,
|
||||
10,
|
||||
true);
|
||||
}
|
||||
|
||||
void bpRecognizer::setThreshhold(int threshhold) {
|
||||
this->threshhold = threshhold;
|
||||
}
|
||||
|
||||
void bpRecognizer::setBackground(ofxCvGrayscaleImage image) {
|
||||
this->background = image;
|
||||
}
|
19
beerpong/src/bpRecognizer.h
Normal file
19
beerpong/src/bpRecognizer.h
Normal file
@ -0,0 +1,19 @@
|
||||
#pragma once
|
||||
|
||||
#include "ofxOpenCv.h"
|
||||
|
||||
class bpRecognizer
|
||||
{
|
||||
public:
|
||||
void update(ofxCvGrayscaleImage image, int video_width, int video_height);
|
||||
void setThreshhold(int threshhold);
|
||||
void setBackground(ofxCvGrayscaleImage image);
|
||||
|
||||
ofxCvGrayscaleImage currentImage;
|
||||
ofxCvGrayscaleImage background;
|
||||
ofxCvGrayscaleImage subtracted;
|
||||
ofxCvGrayscaleImage binarized;
|
||||
ofxCvContourFinder contourFinder;
|
||||
int threshhold;
|
||||
};
|
||||
|
@ -1,11 +1,11 @@
|
||||
#include "ofApp.h"
|
||||
|
||||
#define VIDEO_WIDTH 568
|
||||
#define VIDEO_HEIGHT 320
|
||||
#define VIDEO_WIDTH 360
|
||||
#define VIDEO_HEIGHT 640
|
||||
|
||||
//--------------------------------------------------------------
|
||||
void ofApp::setup(){
|
||||
vidPlayer.load("beer.mkv"); // in /bin/data/
|
||||
vidPlayer.load("video.mkv"); // in /bin/data/
|
||||
vidPlayer.play();
|
||||
vidPlayer.setLoopState(OF_LOOP_NORMAL);
|
||||
|
||||
@ -23,25 +23,23 @@ void ofApp::update(){
|
||||
|
||||
vidPlayer.update();
|
||||
colorVideo.setFromPixels(vidPlayer.getPixels());
|
||||
|
||||
grayVideo = colorVideo; // Convert Color to Grayscale
|
||||
|
||||
//cvInRange();
|
||||
//colorVideo.convertToGrayscalePlanarImage(red, 0);
|
||||
|
||||
if (learnBackground){
|
||||
background = grayVideo;
|
||||
recognizer.setBackground(grayVideo);
|
||||
learnBackground = false;
|
||||
}
|
||||
|
||||
// Background subtraction
|
||||
binarized.absDiff(background, grayVideo);
|
||||
// Binarization
|
||||
binarized.threshold(threshhold);
|
||||
recognizer.setThreshhold(threshhold);
|
||||
recognizer.update(grayVideo, VIDEO_WIDTH, VIDEO_HEIGHT);
|
||||
|
||||
contourFinder.findContours(
|
||||
binarized,
|
||||
10,
|
||||
VIDEO_HEIGHT * VIDEO_WIDTH / 10,
|
||||
10,
|
||||
true);
|
||||
background = recognizer.background;
|
||||
subtracted = recognizer.subtracted;
|
||||
binarized = recognizer.binarized;
|
||||
contourFinder = recognizer.contourFinder;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------
|
||||
@ -50,12 +48,20 @@ void ofApp::draw(){
|
||||
ofSetHexColor(0xffffff);
|
||||
colorVideo.draw(20, 20);
|
||||
grayVideo.draw(40 + VIDEO_WIDTH, 20);
|
||||
background.draw(20, 40 + VIDEO_HEIGHT);
|
||||
binarized.draw(40 + VIDEO_WIDTH, 40 + VIDEO_HEIGHT);
|
||||
subtracted.draw(60 + 2 * VIDEO_WIDTH, 20);
|
||||
//binarized.draw(80 + 3 * VIDEO_WIDTH, 20);
|
||||
//colorVideo.draw(20, 20);
|
||||
//grayVideo.draw(40 + VIDEO_WIDTH, 20);
|
||||
//background.draw(20, 40 + VIDEO_HEIGHT);
|
||||
//binarized.draw(40 + VIDEO_WIDTH, 40 + VIDEO_HEIGHT);
|
||||
|
||||
//red.draw(40 + VIDEO_WIDTH, 20);
|
||||
//green.draw(20, 40 + VIDEO_HEIGHT);
|
||||
//blue.draw(40 + VIDEO_WIDTH, 40 + VIDEO_HEIGHT);
|
||||
|
||||
ofFill();
|
||||
ofSetHexColor(0x333333);
|
||||
ofDrawRectangle(40 + VIDEO_WIDTH, 60 + VIDEO_HEIGHT + VIDEO_HEIGHT, VIDEO_WIDTH, VIDEO_HEIGHT);
|
||||
ofDrawRectangle(80 + 3 * VIDEO_WIDTH, 20, VIDEO_WIDTH, VIDEO_HEIGHT);
|
||||
ofSetHexColor(0xffffff);
|
||||
|
||||
for (int i = 0; i < contourFinder.blobs.size(); i++) {
|
||||
@ -75,10 +81,10 @@ void ofApp::draw(){
|
||||
|
||||
if (aspect_ratio > 0.5 && aspect_ratio < 1.5)
|
||||
{
|
||||
blob.draw(40 + VIDEO_WIDTH, 60 + VIDEO_HEIGHT + VIDEO_HEIGHT);
|
||||
blob.draw(80 + 3 * VIDEO_WIDTH, 20);
|
||||
ofDrawBitmapString(sizeStr.str(),
|
||||
contourFinder.blobs[i].boundingRect.getCenter().x + 40 + VIDEO_WIDTH,
|
||||
contourFinder.blobs[i].boundingRect.getCenter().y + 60 + VIDEO_HEIGHT + VIDEO_HEIGHT);
|
||||
contourFinder.blobs[i].boundingRect.getCenter().x + 80 + 3 * VIDEO_WIDTH,
|
||||
contourFinder.blobs[i].boundingRect.getCenter().y + 20);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "ofMain.h"
|
||||
#include "ofxOpenCv.h"
|
||||
#include "ofxGui.h"
|
||||
#include "bpRecognizer.h"
|
||||
|
||||
class ofApp : public ofBaseApp{
|
||||
|
||||
@ -28,8 +29,10 @@ class ofApp : public ofBaseApp{
|
||||
// Images displaying original video
|
||||
ofxCvColorImage colorVideo;
|
||||
ofxCvGrayscaleImage grayVideo;
|
||||
bpRecognizer recognizer;
|
||||
|
||||
ofxCvGrayscaleImage background;
|
||||
ofxCvGrayscaleImage subtracted;
|
||||
ofxCvGrayscaleImage binarized;
|
||||
|
||||
ofxCvContourFinder contourFinder;
|
||||
@ -39,4 +42,8 @@ class ofApp : public ofBaseApp{
|
||||
ofxPanel gui;
|
||||
|
||||
ofParameter<int> threshhold;
|
||||
|
||||
ofxCvGrayscaleImage red;
|
||||
ofxCvGrayscaleImage green;
|
||||
ofxCvGrayscaleImage blue;
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user