JD2022-TU1/main/extern/Camcam/Inc/handTracking.h

82 lines
No EOL
4.6 KiB
C

#ifndef _HANDTRACKING_H_
#define _HANDTRACKING_H_
#include <stdio.h>
#include <windows.h>
#include <time.h>
#include <COMMDLG.H>
#include <VFW.H>
#include "../Inc/SCENE.H"
#include "../Inc/NET.H"
#include "../Inc/CODEC.H"
#include "../TestApp/MinimizeToTray.h"
#include "../TestApp/resource.h"
//Features tracking
void trackMouth(s32 * dest, s32 * reverse, s32 * imgReverseRef, bool rebuildRefPatches, float maxTolerancePercentage, int* posPtsRef, int sx, int sy, int pitch);
//Mouvement tracking
void getMvtVectorsMap(MAP& mvtMap, MAP& srcMap, int critere, int blocSize, int windowSize, int blur);
void showMvt(WORKINGSPACE* WSPC, MAP &DESTMAP, MAP &SOURCEMAP, int deltaPerPixel, int blockSize);
void estimMvt(s32 * im1, s32 * im2, s32 * imd, int PITCH, int Height, int Width);
void estimMvtRap(s32 * im1, s32 * im2, s32 * imd, int PITCH, int Height, int Width);
void estimMvtRap2(WORKINGSPACE* WSPC, MAP &SOURCEMAP);
//Hands tracking
void Contour(DrawInterface* DI, INPUT_IO** ID_MEDIA, int MediaDest, int MaskSrc);
void PropagateMask(DrawInterface* DI, INPUT_IO** ID_MEDIA, int MediaDest, int Mask1, int Mask2);
void SkinMask3(DrawInterface* DI, INPUT_IO** ID_MEDIA, int MediaDest, int MediaSrc, char* ColorRGB, int* DeltaYInf_DeltaYSup_DeltaCbInf_DeltaCbSup_DeltaCrInf_DeltaCrSup);
void TranslateSkinColor(DrawInterface* DI, INPUT_IO** ID_MEDIA, int mediaDst, int MaskSrc, int maskSrc, char* ColorRGBSrc1, char* ColorRGBSrc2, char* ColorRGBDst1, char* ColorRGBDst2);
void extendSkinColor(WORKINGSPACE* WSPC, MAP &DESTMAP, MAP &SOURCEMAP, int deltaOnColor, int YMin, int YMax, int CbMin, int CbMax, int CrMin, int CrMax);
bool isOfSkinColor(s32 pixel, int YMin, int YMax, int CbMin, int CbMax,int CrMin, int CrMax);
void showSkin(MAP &DESTMAP, MAP &SOURCEMAP, int YMin, int YMax, int CbMin, int CbMax, int CrMin, int CrMax);
void showFingerPuppet(MATRIX camMatrix, float camFocale, SmallScene * SmSc, s32 * dest, s32 * reverse, s32 * mask, s32 * src, int SX, int SY, int PITCH, bool sizeChanged);
void getExtremities(s32 * src, s32 * dest, int PITCH, int sizeOfMap, int SX, int SY);
u32 trackHands(WORKINGSPACE* WSPC, MAP &SOURCEMAP);
void handMouse(MAP &SOURCEMAP, DrawInterface * DI, unsigned int textureIndex);
//Miscellaneous
void LocalHistograms(DrawInterface* DI, INPUT_IO** ID_MEDIA, char* returnStr, int MediaDest, int MediaSrc, int* XY, int Size);
bool checkDestSize(MAP& dest, MAP& src);
bool checkDestSize(MAP& dest, int srcSX, int srcSY, int srcPITCH);
bool checkDestSize(s32* dest, int* destSX, int* destSY, int* destPITCH, int srcSX, int srcSY, int srcPITCH);
bool checkDestSize(s32* dest, int* destSX, int* destSY, int* destPITCH, int* srcSX, int* srcSY, int* srcPITCH);
void MC_GC2(s32 *SourceMAp,u32 Pitch,u32 SizeX,u32 SizeY);
inline bool hold(int x, int y, int sx, int sy) {if(x<0 || x>=sx || y<0 || y>=sy) return false; return true;}
void applyTransf(WORKINGSPACE* WSPC, s32 * imC, int PITCH, int Height, int Width);
void debugScr(float val);
void drawLine(s32* imd, int x1, int x2, int y1, int y2, int PITCH, int coul);
//Filtering
void filterImgRVB(MAP& imgFiltered, MAP& imgRGB, MAP& imgTmp);
void filterImgRVB(s32 * imgFiltered, s32 * imgRGB, int PITCH, int Height, int Width);
void filterImg(s32 * imgG, s32 * imgRGB, int PITCH, int Height, int Width);
//Operations on masks
int spreadPx(s32 * visited, s32 * imDest, int px, int py, int PITCH, int Height, int Width, s32 * XStack, s32 * YStack);
int spreadPx4C(s32 * visited, s32 * imDest, int px, int py, int PITCH, int Height, int Width, s32 * XStack, s32 * YStack);
void getBiggestParts(WORKINGSPACE* WSPC, MAP &SOURCEMAP, int minimumSize);
void getHoles(WORKINGSPACE* WSPC, MAP &SOURCEMAP);
void fillHoles(WORKINGSPACE* WSPC, MAP &SOURCEMAP);
void fillHoles4C(WORKINGSPACE* WSPC, MAP &SOURCEMAP);
//Operations on colors
void normalizeRgbImg(MAP& img);
s32 getRGBFromYCbCr(s32 Y, s32 Cb, s32 Cr);
inline s32 getR(s32 ARGB) {return ((ARGB>>16) & 0xff);};
inline s32 getV(s32 ARGB) {return ((ARGB>>8) & 0xff);};
inline s32 getB(s32 ARGB) {return (ARGB & 0xff);};
inline s32 getY(s32 ARGB) {return (( ( 66 * getR(ARGB) + 129 * getV(ARGB) + 25 * getB(ARGB) + 128) >> 8) + 16);};
inline s32 getCb(s32 ARGB) {return (( ( -38 * getR(ARGB) - 74 * getV(ARGB) + 112 * getB(ARGB) + 128) >> 8) + 128);};
inline s32 getCr(s32 ARGB) {return (( ( 112 * getR(ARGB) - 94 * getV(ARGB) - 18 * getB(ARGB) + 128) >> 8) + 128);};
inline s32 makeRGB(s32 R, s32 V, s32 B) {return ((R<<16) | (V<<8) | B);};
inline s32 spreadGrey(s32 *ARGB, int min, int max) {if(min==max) return getY(*ARGB); return (255*(getY(*ARGB)-min))/(max-min);};
inline s32 spreadGrey(s32 grey, int min, int max) {if(min==max) return grey; return (255*(grey-min))/(max-min);};
#endif