X-Git-Url: http://git.treefish.org/~alex/stickletrack.git/blobdiff_plain/65dda843f459c7608c516342a903bcb9700e099f..ab5ee4c78e1fa591a4d8d9af812f83a9e81ef6d7:/masking.cpp diff --git a/masking.cpp b/masking.cpp index d76a8b4..b90153e 100644 --- a/masking.cpp +++ b/masking.cpp @@ -1,6 +1,8 @@ #include "masking.h" #include "stickletrack.h" +#include + static Mat background, foregroundmask, colormask, mScissors, scissorsmask; static double Z = 1; @@ -29,29 +31,30 @@ void mouseScissors(int evt, int x, int y, int flags, void* param){ void masking_init() { background = Mat::zeros(Props.height, Props.width, CV_32FC3); - namedWindow("background", CV_WINDOW_KEEPRATIO); - namedWindow("foregroundmask", CV_WINDOW_KEEPRATIO); - namedWindow("colormask", CV_WINDOW_KEEPRATIO); - namedWindow("scissorsmask", CV_WINDOW_KEEPRATIO); - - createTrackbar("Decay", "background", &Prefs.halfdecay, 100, &trackbarCallbackUpdateNormPrefs, 0); - createTrackbar("Threshold", "foregroundmask", &Prefs.forethreshold, 255, &trackbarCallbackUpdateNormPrefs, 0); - - createTrackbar("min H", "colormask", &Prefs.mincolor[0], 255, NULL, 0); - createTrackbar("min S", "colormask", &Prefs.mincolor[1], 255, NULL, 0); - createTrackbar("min V", "colormask", &Prefs.mincolor[2], 255, NULL, 0); - createTrackbar("max H", "colormask", &Prefs.maxcolor[0], 255, NULL, 0); - createTrackbar("max S", "colormask", &Prefs.maxcolor[1], 255, NULL, 0); - createTrackbar("max V", "colormask", &Prefs.maxcolor[2], 255, NULL, 0); - - cvSetMouseCallback("scissorsmask", mouseScissors, 0); + namedWindow("stickletrack_masking_background", CV_WINDOW_KEEPRATIO); + namedWindow("stickletrack_masking_backgroundmask", CV_WINDOW_KEEPRATIO); + namedWindow("stickletrack_masking_colormask", CV_WINDOW_KEEPRATIO); + namedWindow("stickletrack_masking_scissorsmask", CV_WINDOW_KEEPRATIO); + + createTrackbar("Decay", "stickletrack_masking_background", &Prefs.halfdecay, 100, &trackbarCallbackUpdateNormPrefs, 0); + createTrackbar("Threshold", "stickletrack_masking_backgroundmask", &Prefs.forethreshold, 255, &trackbarCallbackUpdateNormPrefs, 0); + + createTrackbar("min H", "stickletrack_masking_colormask", &Prefs.mincolor[0], 255, NULL, 0); + createTrackbar("min S", "stickletrack_masking_colormask", &Prefs.mincolor[1], 255, NULL, 0); + createTrackbar("min V", "stickletrack_masking_colormask", &Prefs.mincolor[2], 255, NULL, 0); + createTrackbar("max H", "stickletrack_masking_colormask", &Prefs.maxcolor[0], 255, NULL, 0); + createTrackbar("max S", "stickletrack_masking_colormask", &Prefs.maxcolor[1], 255, NULL, 0); + createTrackbar("max V", "stickletrack_masking_colormask", &Prefs.maxcolor[2], 255, NULL, 0); + + cvSetMouseCallback("stickletrack_masking_scissorsmask", mouseScissors, 0); } void computeBackground (const Mat& origframe, Mat& background, double& Z, const double& decayfac) { background = ( exp(-decayfac) * background * Z + origframe ) / ( exp(-decayfac) * Z + 1 ); Z = exp(-decayfac) * Z + 1; - imshow("background", background/255.0); + if ( ! isWindowClosed("stickletrack_masking_background") ) + imshow("stickletrack_masking_background", background/255.0); } void computeForegroundMask (const Mat& origframe, const Mat& background, Mat& foregroundMask) { @@ -60,7 +63,8 @@ void computeForegroundMask (const Mat& origframe, const Mat& background, Mat& fo threshold(foregroundMask, foregroundMask, Prefs.forethreshold, 255, CV_THRESH_BINARY); foregroundMask.convertTo(foregroundMask, CV_8UC3); - imshow("foregroundmask", foregroundmask); + if ( ! isWindowClosed("stickletrack_masking_backgroundmask") ) + imshow("stickletrack_masking_backgroundmask", foregroundmask); } void computeColorMask (const Mat& origframe, Mat& colormask) { @@ -69,7 +73,8 @@ void computeColorMask (const Mat& origframe, Mat& colormask) { inRange(colormask, Scalar(Prefs.mincolor[0],Prefs.mincolor[1],Prefs.mincolor[2]), Scalar(Prefs.maxcolor[0], Prefs.maxcolor[1], Prefs.maxcolor[2]), colormask); colormask.convertTo(colormask, CV_8UC3); - imshow("colormask", colormask); + if ( ! isWindowClosed("stickletrack_masking_colormask") ) + imshow("stickletrack_masking_colormask", colormask); } void computeScissors (const Mat& origframe, Mat& mScissors) { @@ -90,7 +95,9 @@ void computeScissorsMask (Mat& scissorsmask) { else scissorsmask = Mat::ones(Props.height, Props.width, CV_8U); - imshow("scissorsmask", mScissors); + //if ( ! windowclosed_sissors ) + if ( ! isWindowClosed("stickletrack_masking_scissorsmask") ) + imshow("stickletrack_masking_scissorsmask", mScissors); } void masking_getCombinedMask(const Mat& origframe, Mat& combinedmask) {