diff --git a/.gitignore b/.gitignore index 22200ad..17d8d74 100644 --- a/.gitignore +++ b/.gitignore @@ -6,11 +6,12 @@ Release ipch lib /resource/result/*.* + +#Files *.exe *.dll !opencv_classes2413d.dll !opencv_classes2413.dll -#Files *.ini *.bsc *.sdf @@ -41,4 +42,4 @@ lib *.local *.identcache *.cmd -*.stat +*.stat \ No newline at end of file diff --git a/bin/Win32/opencv_classes2413.dll b/bin/Win32/opencv_classes2413.dll index 7db2a89..f51f0f8 100644 Binary files a/bin/Win32/opencv_classes2413.dll and b/bin/Win32/opencv_classes2413.dll differ diff --git a/bin/Win32/opencv_classes2413d.dll b/bin/Win32/opencv_classes2413d.dll index 9e823fb..83a54b2 100644 Binary files a/bin/Win32/opencv_classes2413d.dll and b/bin/Win32/opencv_classes2413d.dll differ diff --git a/source/OpenCV.inc b/source/OpenCV.inc index beb6813..bd59afb 100644 --- a/source/OpenCV.inc +++ b/source/OpenCV.inc @@ -15,7 +15,7 @@ {$ENDIF} {$POINTERMATH ON} -{_$DEFINE SAFELOADLIB} +{$DEFINE SAFELOADLIB} {$DEFINE USE_STUB_FOR_MISS_FUNC} {$WARN SYMBOL_DEPRECATED OFF} diff --git a/source/classes/ocv.cls.contrib.pas b/source/classes/ocv.cls.contrib.pas index b23e573..6563db2 100644 --- a/source/classes/ocv.cls.contrib.pas +++ b/source/classes/ocv.cls.contrib.pas @@ -31,17 +31,20 @@ interface Uses ocv.core.types_c, + ocv.cls.core, ocv.cls.types; Type TInputArrayOfIplImage = TArray; // InputArrayOfArrays + TInputArrayOfMat = TArray; // InputArrayOfArrays TInputArrayOfInteger = TArray; // InputArray IFaceRecognizer = interface(IOCVCommon) ['{199DE478-2C78-4347-B553-C062290C78D2}'] // Trains a FaceRecognizer. // CV_WRAP virtual void train(InputArrayOfArrays src, InputArray labels) = 0; - procedure train(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); + procedure train(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); overload; + procedure train(src: TInputArrayOfMat; labels: TInputArrayOfInteger); overload; // Updates a FaceRecognizer. // CV_WRAP void update(InputArrayOfArrays src, InputArray labels); @@ -89,7 +92,8 @@ Type constructor createLBPHFaceRecognizer(radius: Integer = 1; neighbors: Integer = 8; grid_x: Integer = 8; grid_y: Integer = 8; threshold: double = DBL_MAX); destructor Destroy; override; - procedure train(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); + procedure train(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); overload; + procedure train(src: TInputArrayOfMat; labels: TInputArrayOfInteger); overload; procedure update(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); function predict(src: pIplImage): Integer; overload; procedure predict(src: pIplImage; Var lab: Integer; var confidence: double); overload; @@ -103,7 +107,7 @@ Type {$IFDEF SAFELOADLIB} type - TInitModule_contrib = function()cbool; cdecl; + TInitModule_contrib = function():cbool; cdecl; var InitModule_contrib: TInitModule_contrib; @@ -115,28 +119,6 @@ implementation uses ocv.lib; -{$IFDEF SAFELOADLIB} - -Var - contribDLL: Cardinal; - -procedure Init_opencv_contrib; -begin - contribDLL := ocvLoadLibrary(opencv_contrib_lib); - Assert(contribDLL <> 0, 'Can not init ' + opencv_contrib_lib); - - InitModule_contrib := ocvGetProcAddress('?initModule_contrib@cv@@YA_NXZ', contribDLL); -end; - -initialization - -Init_opencv_contrib; - -{$ELSE} -function InitModule_contrib; external opencv_contrib_lib name '?initModule_contrib@cv@@YA_NXZ'; -{$ENDIF} -{ TFaceRecognizer } - // CV_EXPORTS_W Ptr createEigenFaceRecognizer(int num_components = 0, double threshold = DBL_MAX); function Create_EigenFaceRecognizer(num_components: Integer = 0; threshold: double = DBL_MAX): TOpenCVClass; stdcall; external opencv_classes_lib name '_Create_EigenFaceRecognizer@12'; @@ -162,28 +144,29 @@ procedure FaceRecognizerPredict(const M: TOpenCVClass; scr: pIplImage; var _labe procedure FaceRecognizerTrain(const M: TOpenCVClass; const n: Integer; scr: Pointer; labels: Pointer); stdcall; external opencv_classes_lib name '_FaceRecognizerTrain@16'; overload; +procedure FaceRecognizerTrainMat(const M: TOpenCVClass; const n: Integer; scr: Pointer; labels: Pointer); stdcall; + external opencv_classes_lib name '_FaceRecognizerTrain@16'; overload; procedure FaceRecognizerUpdate(const M: TOpenCVClass; const n: Integer; scr: Pointer; labels: Pointer); stdcall; external opencv_classes_lib name '_FaceRecognizerUpdate@16'; procedure _DestroyFaceRecognizer(const E: TOpenCVClass); stdcall; external opencv_classes_lib name '_DestroyFaceRecognizer@4'; + { TFaceRecognizer } + constructor TFaceRecognizer.createEigenFaceRecognizer(num_components: Integer; threshold: double); begin - inherited Create; - FData := Create_EigenFaceRecognizer(num_components, threshold); + inherited Create(Create_EigenFaceRecognizer(num_components, threshold)); end; constructor TFaceRecognizer.createFisherFaceRecognizer(num_components: Integer; threshold: double); begin - inherited Create; - FData := Create_FisherFaceRecognizer(num_components, threshold); + inherited Create(Create_FisherFaceRecognizer(num_components, threshold)); end; constructor TFaceRecognizer.createLBPHFaceRecognizer(radius, neighbors, grid_x, grid_y: Integer; threshold: double); begin - inherited Create; - FData := Create_LBPHFaceRecognizer(radius, neighbors, grid_x, grid_y, threshold); + inherited Create(Create_LBPHFaceRecognizer(radius, neighbors, grid_x, grid_y, threshold)); end; destructor TFaceRecognizer.Destroy; @@ -218,6 +201,17 @@ begin FaceRecognizerSave(FData, filename.AsPAnsiChar); end; +procedure TFaceRecognizer.train(src: TInputArrayOfMat; labels: TInputArrayOfInteger); +Var + src_mat: TArray; + i : Integer; +begin + SetLength(src_mat, Length(src)); + for i := 0 to High(src_mat) do + src_mat[i] := src[i]._InternalData; + FaceRecognizerTrainMat(FData, Length(src), @src_mat[0], @labels[0]); +end; + procedure TFaceRecognizer.train(src: TInputArrayOfIplImage; labels: TInputArrayOfInteger); begin FaceRecognizerTrain(FData, Length(src), @src[0], @labels[0]); @@ -228,4 +222,25 @@ begin FaceRecognizerUpdate(FData, Length(src), @src[0], @labels[0]); end; +{$IFDEF SAFELOADLIB} + +Var + contribDLL: Cardinal; + +procedure Init_opencv_contrib; +begin + contribDLL := ocvLoadLibrary(opencv_contrib_lib); + Assert(contribDLL <> 0, 'Can not init ' + opencv_contrib_lib); + + InitModule_contrib := ocvGetProcAddress('?initModule_contrib@cv@@YA_NXZ', contribDLL); +end; + +initialization + +Init_opencv_contrib; + +{$ELSE} +function InitModule_contrib; external opencv_contrib_lib name '?initModule_contrib@cv@@YA_NXZ'; +{$ENDIF} + end. diff --git a/source/classes/ocv.cls.core.pas b/source/classes/ocv.cls.core.pas index c7f41b5..da4492f 100644 --- a/source/classes/ocv.cls.core.pas +++ b/source/classes/ocv.cls.core.pas @@ -40,8 +40,6 @@ Type TSize = class(TOCVCommon, ISize) public - constructor Create(const OpenCVClass: TOpenCVClass); - destructor Destroy; override; end; IRect2i = interface(IOCVCommon) @@ -64,7 +62,17 @@ Type \return the previous state *) // CV_EXPORTS bool setBreakOnError(bool flag); + +{$IFDEF SAFELOADLIB} + +type + TsetBreakOnError = function(flag: cbool): cbool; cdecl; + +var + setBreakOnError: TsetBreakOnError; +{$ELSE} function setBreakOnError(flag: cbool): cbool; cdecl; +{$ENDIF} (* typedef int (CV_CDECL *ErrorCallback)( int status, const char* func_name, @@ -86,18 +94,54 @@ type \return the previous error handler *) // CV_EXPORTS ErrorCallback redirectError( ErrorCallback errCallback, void* userdata=0, void** prevUserdata=0); + +{$IFDEF SAFELOADLIB} + +type + TredirectError = function(errCallback: TErrorCallback; userdata: pointer = nil; prevUserdata: PPointer = nil) + : TErrorCallback; cdecl; + +var + redirectError: TredirectError; +{$ELSE} function redirectError(errCallback: TErrorCallback; userdata: pointer = nil; prevUserdata: PPointer = nil) : TErrorCallback; cdecl; - +{$ENDIF} // CV_EXPORTS void glob(String pattern, std::vector& result, bool recursive = false); // CV_EXPORTS_W void setNumThreads(int nthreads); -procedure setNumThreads(nthreads: integer); cdecl; -// CV_EXPORTS_W int getNumThreads(); -function getNumThreads(): integer; cdecl; -// CV_EXPORTS_W int getThreadNum(); -function getThreadNum(): integer; cdecl; +{$IFDEF SAFELOADLIB} +type + TsetNumThreads = procedure(nthreads: integer); cdecl; + +var + setNumThreads: TsetNumThreads; +{$ELSE} +procedure setNumThreads(nthreads: integer); cdecl; +{$ENDIF} +// CV_EXPORTS_W int getNumThreads(); +{$IFDEF SAFELOADLIB} + +type + TgetNumThreads = function(): integer; cdecl; + +var + getNumThreads: TgetNumThreads; +{$ELSE} +function getNumThreads(): integer; cdecl; +{$ENDIF} +// CV_EXPORTS_W int getThreadNum(); +{$IFDEF SAFELOADLIB} + +type + TgetThreadNum = function: integer; cdecl; + +var + getThreadNum: TgetThreadNum; +{$ELSE} +function getThreadNum(): integer; cdecl; +{$ENDIF} // CV_EXPORTS_W const string& getBuildInformation(); // ! Returns the number of ticks. @@ -109,8 +153,16 @@ function getThreadNum(): integer; cdecl; cv::getTickFrequency() to convert ticks to seconds. *) // CV_EXPORTS_W int64 getTickCount(); -function getTickCount(): int64; cdecl; +{$IFDEF SAFELOADLIB} +type + TgetTickCount = function: int64; cdecl; + +var + getTickCount: TgetTickCount; +{$ELSE} +function getTickCount(): int64; cdecl; +{$ENDIF} (* ! Returns the number of ticks per seconds. @@ -124,8 +176,16 @@ function getTickCount(): int64; cdecl; \endcode *) // CV_EXPORTS_W double getTickFrequency(); -function getTickFrequency(): double; cdecl; +{$IFDEF SAFELOADLIB} +type + TgetTickFrequency = function: double; cdecl; + +var + getTickFrequency: TgetTickFrequency; +{$ELSE} +function getTickFrequency(): double; cdecl; +{$ENDIF} (* ! Returns the number of CPU ticks. @@ -135,8 +195,16 @@ function getTickFrequency(): double; cdecl; for which cv::getTickCount() granularity is not enough. *) // CV_EXPORTS_W int64 getCPUTickCount(); -function getCPUTickCount(): int64; cdecl; +{$IFDEF SAFELOADLIB} +type + TgetCPUTickCount = function: int64; cdecl; + +var + getCPUTickCount: TgetCPUTickCount; +{$ELSE} +function getCPUTickCount(): int64; cdecl; +{$ENDIF} (* ! Returns SSE etc. support status @@ -158,12 +226,28 @@ function getCPUTickCount(): int64; cdecl; until you call cv::useOptimized(true)} *) // CV_EXPORTS_W bool checkHardwareSupport(int feature); -function checkHardwareSupport(feature: integer): cbool; cdecl; +{$IFDEF SAFELOADLIB} +type + TcheckHardwareSupport = function(feature: integer): cbool; cdecl; + +var + checkHardwareSupport: TcheckHardwareSupport; +{$ELSE} +function checkHardwareSupport(feature: integer): cbool; cdecl; +{$ENDIF} // ! returns the number of CPUs (including hyper-threading) // CV_EXPORTS_W int getNumberOfCPUs(); -function getNumberOfCPUs(): integer; cdecl; +{$IFDEF SAFELOADLIB} +type + TgetNumberOfCPUs = function: integer; cdecl; + +var + getNumberOfCPUs: TgetNumberOfCPUs; +{$ELSE} +function getNumberOfCPUs(): integer; cdecl; +{$ENDIF} (* ! Allocates memory buffer @@ -175,8 +259,16 @@ function getNumberOfCPUs(): integer; cdecl; \return the allocated memory buffer. *) // CV_EXPORTS void* fastMalloc(size_t bufSize); -function fastMalloc(bufSize: size_t): pointer; cdecl; +{$IFDEF SAFELOADLIB} +type + TfastMalloc = function(bufSize: size_t): pointer; cdecl; + +var + fastMalloc: TfastMalloc; +{$ELSE} +function fastMalloc(bufSize: size_t): pointer; cdecl; +{$ENDIF} (* ! Frees the memory allocated with cv::fastMalloc @@ -184,8 +276,16 @@ function fastMalloc(bufSize: size_t): pointer; cdecl; When ptr==NULL, the function has no effect. *) // CV_EXPORTS void fastFree(void * ptr); -procedure fastFree(ptr: pointer); cdecl; +{$IFDEF SAFELOADLIB} +type + TfastFree = procedure(ptr: pointer); cdecl; + +var + fastFree: TfastFree; +{$ELSE} +procedure fastFree(ptr: pointer); cdecl; +{$ENDIF} (* ! Turns on/off available optimization @@ -196,15 +296,32 @@ procedure fastFree(ptr: pointer); cdecl; to call this function anywhere in the code. Instead, call it somewhere at the top level.} *) // CV_EXPORTS_W void setUseOptimized(bool onoff); -procedure setUseOptimized(onoff: cbool); cdecl; +{$IFDEF SAFELOADLIB} +type + TsetUseOptimized = procedure(onoff: cbool); cdecl; + +var + setUseOptimized: TsetUseOptimized; +{$ELSE} +procedure setUseOptimized(onoff: cbool); cdecl; +{$ENDIF} (* ! Returns the current optimization status The function returns the current optimization status, which is controlled by cv::setUseOptimized(). *) // CV_EXPORTS_W bool useOptimized(); +{$IFDEF SAFELOADLIB} + +type + TuseOptimized = function: cbool; cdecl; + +var + useOptimized: TuseOptimized; +{$ELSE} function useOptimized(): cbool; cdecl; +{$ENDIF} Type @@ -257,21 +374,6 @@ Uses ocv.core_c, ocv.lib; -function setBreakOnError; external core_lib; -function redirectError; external core_lib; -procedure setNumThreads; external core_lib; -function getNumThreads; external core_lib; -function getThreadNum; external core_lib; -function getTickCount; external core_lib; -function getTickFrequency; external core_lib; -function getCPUTickCount; external core_lib; -function checkHardwareSupport; external core_lib; -function getNumberOfCPUs; external core_lib; -function fastMalloc; external core_lib; -procedure fastFree; external core_lib; -procedure setUseOptimized; external core_lib; -function useOptimized; external core_lib; - // ------------------------------ Mat ------------------------------ function _CreateMat: TOpenCVClass; stdcall; external opencv_classes_lib name '_CreateMat@0'; function _GetMatData(const e: TOpenCVClass; index: integer; param: integer = 0): integer; stdcall; @@ -378,17 +480,51 @@ begin cvSetData(@Self, Mat.data, Mat.step1); end; -{ TSize } +{$IFDEF SAFELOADLIB} -constructor TSize.Create(const OpenCVClass: TOpenCVClass); +Var + coreDLL: Cardinal; + +procedure Init_opencv_contrib; begin - FData := OpenCVClass; + coreDLL := ocvLoadLibrary(core_lib); + Assert(coreDLL <> 0, 'Can not init ' + core_lib); + + setBreakOnError := ocvGetProcAddress('?setBreakOnError@cv@@YA_N_N@Z', coreDLL); + redirectError := ocvGetProcAddress('?redirectError@cv@@YAP6AHHPBD00HPAX@ZP6AHH000H1@Z1PAPAX@Z', coreDLL); + setNumThreads := ocvGetProcAddress('?setNumThreads@cv@@YAXH@Z', coreDLL); + getNumThreads := ocvGetProcAddress('?getNumThreads@cv@@YAHXZ', coreDLL); + getThreadNum := ocvGetProcAddress('?getThreadNum@cv@@YAHXZ', coreDLL); + getTickCount := ocvGetProcAddress('?getTickCount@cv@@YA_JXZ', coreDLL); + getTickFrequency := ocvGetProcAddress('?getTickFrequency@cv@@YANXZ', coreDLL); + getCPUTickCount := ocvGetProcAddress('?getCPUTickCount@cv@@YA_JXZ', coreDLL); + checkHardwareSupport := ocvGetProcAddress('?checkHardwareSupport@cv@@YA_NH@Z', coreDLL); + getNumberOfCPUs := ocvGetProcAddress('?getNumberOfCPUs@cv@@YAHXZ', coreDLL); + fastMalloc := ocvGetProcAddress('?fastMalloc@cv@@YAPAXI@Z', coreDLL); + fastFree := ocvGetProcAddress('?fastFree@cv@@YAXPAX@Z', coreDLL); + setUseOptimized := ocvGetProcAddress('?setUseOptimized@cv@@YAX_N@Z', coreDLL); + useOptimized := ocvGetProcAddress('?useOptimized@cv@@YA_NXZ', coreDLL); end; -destructor TSize.Destroy; -begin +initialization - inherited; -end; +Init_opencv_contrib; + +{$ELSE} +function setBreakOnError; external core_lib name '?setBreakOnError@cv@@YA_N_N@Z'; +function redirectError; external core_lib name '?redirectError@cv@@YAP6AHHPBD00HPAX@ZP6AHH000H1@Z1PAPAX@Z'; +procedure setNumThreads; external core_lib name '?setNumThreads@cv@@YAXH@Z'; +function getNumThreads; external core_lib name '?getNumThreads@cv@@YAHXZ'; +function getThreadNum; external core_lib name '?getThreadNum@cv@@YAHXZ'; +function getTickCount; external core_lib name '?getTickCount@cv@@YA_JXZ'; +function getTickFrequency; external core_lib name '?getTickFrequency@cv@@YANXZ'; +function getCPUTickCount; external core_lib name '?getCPUTickCount@cv@@YA_JXZ'; +function checkHardwareSupport; external core_lib name '?checkHardwareSupport@cv@@YA_NH@Z'; +function getNumberOfCPUs; external core_lib name '?getNumberOfCPUs@cv@@YAHXZ'; +function fastMalloc; external core_lib name '?fastMalloc@cv@@YAPAXI@Z'; +procedure fastFree; external core_lib name '?fastFree@cv@@YAXPAX@Z'; +procedure setUseOptimized; external core_lib name '?setUseOptimized@cv@@YAX_N@Z'; +function useOptimized; external core_lib name '?useOptimized@cv@@YA_NXZ'; +{$ENDIF} end. diff --git a/source/classes/ocv.cls.objdetect.pas b/source/classes/ocv.cls.objdetect.pas index b612e2a..b7703ec 100644 --- a/source/classes/ocv.cls.objdetect.pas +++ b/source/classes/ocv.cls.objdetect.pas @@ -31,30 +31,11 @@ interface Uses Winapi.Windows, - System.Generics.Collections, ocv.cls.types, ocv.core.types_c, - ocv.highgui_c, - ocv.cls.core, - ocv.cls.mat; + ocv.cls.core; Type - IMaskGenerator = interface(IOCVCommon) - ['{DABEB77F-A919-49EB-999F-C1876812A330}'] - end; - - TMaskGenerator = class(TOCVCommon, IMaskGenerator) - - end; - - // IFileNode = interface(IOCVCommon) - // ['{8BB056BF-08AE-4512-9861-4906D770C2A0}'] - // end; - // TFileNode = class(TOCVCommon, IFileNode) - // end; - - - ICascadeClassifier = interface(IOCVCommon) ['{700C3DEC-F156-4014-9676-5BD9ECC3B01B}'] function empty(): cbool; @@ -73,7 +54,8 @@ Type function isOldFormatCascade(): cbool; function getOriginalWindowSize(): ISize; function getFeatureType(): integer; -// function convert(const oldcascade: String; const newcascade: String): cbool; + function setImage(Image: IMat): cbool; + // function convert(const oldcascade: String; const newcascade: String): cbool; end; TCascadeClassifier = class(TOCVCommon, ICascadeClassifier) @@ -157,10 +139,10 @@ Type function isOldFormatCascade(): cbool; function getOriginalWindowSize(): ISize; function getFeatureType(): integer; -// function convert(const oldcascade: String; const newcascade: String): cbool; + function setImage(Image: IMat): cbool; + // function convert(const oldcascade: String; const newcascade: String): cbool; end; - implementation Uses @@ -180,16 +162,17 @@ function _CascadeClassifier_getOriginalWindowSize(CascadeClassifier: TOpenCVClas external opencv_classes_lib name '_CascadeClassifier_getOriginalWindowSize@4'; function _CascadeClassifier_getFeatureType(CascadeClassifier: TOpenCVClass): integer; stdcall; external opencv_classes_lib name '_CascadeClassifier_getFeatureType@4'; -//function _CascadeClassifier_convert(CascadeClassifier: TOpenCVClass; oldcascade, newcascade: PAnsiChar): cbool; stdcall; -// external opencv_classes_lib name '_CascadeClassifier_convert@12'; - +function _CascadeClassifier_setImage(CascadeClassifier: TOpenCVClass; m: TOpenCVClass): cbool; stdcall; + external opencv_classes_lib name '_CascadeClassifier_setImage@8'; +// function _CascadeClassifier_convert(CascadeClassifier: TOpenCVClass; oldcascade, newcascade: PAnsiChar): cbool; stdcall; +// external opencv_classes_lib name '_CascadeClassifier_convert@12'; { ------------------------------ TCascadeClassifier ------------------------------ } -//function TCascadeClassifier.convert(const oldcascade, newcascade: String): cbool; -//begin -// Result := _CascadeClassifier_convert(FData, oldcascade.AsPAnsiChar, newcascade.AsPAnsiChar); -//end; +// function TCascadeClassifier.convert(const oldcascade, newcascade: String): cbool; +// begin +// Result := _CascadeClassifier_convert(FData, oldcascade.AsPAnsiChar, newcascade.AsPAnsiChar); +// end; constructor TCascadeClassifier.Create; begin @@ -253,4 +236,9 @@ begin Result := _get_CascadeClassifier_load(FData, FileName.AsPAnsiChar); end; +function TCascadeClassifier.setImage(Image: IMat): cbool; +begin + Result := _CascadeClassifier_setImage(FData, Image._InternalData); +end; + end. diff --git a/source/classes/ocv.cls.types.pas b/source/classes/ocv.cls.types.pas index 93779e0..369e90f 100644 --- a/source/classes/ocv.cls.types.pas +++ b/source/classes/ocv.cls.types.pas @@ -40,6 +40,7 @@ Type protected FData: TOpenCVClass; public + constructor Create(const OpenCVClass: TOpenCVClass); function _InternalData: TOpenCVClass; end; @@ -54,6 +55,11 @@ Uses ocv.utils; { TOCVCommon } +constructor TOCVCommon.Create(const OpenCVClass: TOpenCVClass); +begin + FData := OpenCVClass; +end; + function TOCVCommon._InternalData: TOpenCVClass; begin Result := FData; diff --git a/source/opencv_classes/contrib_prx.cpp b/source/opencv_classes/contrib_prx.cpp index b18ae02..46fe439 100644 --- a/source/opencv_classes/contrib_prx.cpp +++ b/source/opencv_classes/contrib_prx.cpp @@ -58,6 +58,18 @@ namespace cv e->train(images, labels); }; + ICLASS_API void __stdcall FaceRecognizerTrainMat(FaceRecognizer* e, int n, Mat** scr, int* lab) + { + vector images; + vector labels; + for (int i = 0; i < n; i++) + { + images.push_back(*scr[i]); + labels.push_back(lab[i]); + } + e->train(images, labels); + }; + ICLASS_API void __stdcall FaceRecognizerUpdate(FaceRecognizer* e, int n, IplImage** scr, int* lab) { vector images; diff --git a/source/opencv_classes/core_prx.cpp b/source/opencv_classes/core_prx.cpp new file mode 100644 index 0000000..735d9df --- /dev/null +++ b/source/opencv_classes/core_prx.cpp @@ -0,0 +1,62 @@ + +#include "stdafx.h" + +namespace cv +{ + //////////////////// Mat //////////////////// + ICLASS_API Mat* __stdcall CreateMat() + { + return new Mat; + }; + ICLASS_API bool __stdcall MatEmpty(Mat* e) + { + return e->empty(); + } + + ICLASS_API Mat* __stdcall CreateMatFromImage(IplImage* Image) + { + Mat *M = new Mat; + *M = cvarrToMat(Image);// default additional arguments: don't copy data. + //*M= Image; + return M; + } + + ICLASS_API int __stdcall GetMatData(Mat* e, int index, int param) + { + switch (index) + { + case 0: + return (int)e->elemSize(); + case 1: + return (int)e->elemSize1(); + case 2: + return (int)e->type(); + case 3: + return (int)e->depth(); + case 4: + return (int)e->channels(); + case 5: + return (int)e->step1(param); + case 6: + return (int)e->total(); + case 7: + return (int)e->flags; + case 8: + return (int)e->dims; + case 9: + return (int)e->rows; + case 10: + return (int)e->cols; + case 11: + return (int)e->data; + default: + return -1; + } + }; + + ICLASS_API void __stdcall DestroyMat(Mat* e) + { + delete e; + }; + +} \ No newline at end of file diff --git a/source/opencv_classes/highgui_prx.cpp b/source/opencv_classes/highgui_prx.cpp new file mode 100644 index 0000000..40c6576 --- /dev/null +++ b/source/opencv_classes/highgui_prx.cpp @@ -0,0 +1,52 @@ + +#include "stdafx.h" + +namespace cv +{ + + //////////////////// VidoCapture //////////////////// + ICLASS_API VideoCapture* __stdcall CreateVideoCapture() + { + return new VideoCapture; + }; + + ICLASS_API bool __stdcall VideoCaptureOpen(VideoCapture* e, int CamNumber) + { + return e->open(CamNumber); + }; + + ICLASS_API bool __stdcall VideoCaptureOpenFileName(VideoCapture* e, char* FileName) + { + return e->open(FileName); + }; + + ICLASS_API bool __stdcall VideoCaptureisOpened(VideoCapture* e) + { + return e->isOpened(); + }; + + ICLASS_API bool __stdcall VideoCaptureRead(VideoCapture* e, Mat** M) + { + Mat *_M = new Mat; + bool r=e->read(*_M); + *M = _M; + return r; + + }; + + ICLASS_API bool __stdcall VideoCaptureSet(VideoCapture* e, int propId, double value) + { + return e->set(propId, value); + } + + ICLASS_API double __stdcall VideoCaptureGet(VideoCapture* e, int propId) + { + return e->get(propId); + } + + ICLASS_API void __stdcall DestroyVideoCapture(VideoCapture* e) + { + delete e; + }; + +} diff --git a/source/opencv_classes/objdetect_prx.cpp b/source/opencv_classes/objdetect_prx.cpp new file mode 100644 index 0000000..a544976 --- /dev/null +++ b/source/opencv_classes/objdetect_prx.cpp @@ -0,0 +1,54 @@ + +#include "stdafx.h" + +namespace cv +{ + //////////////////// CascadeClassifier //////////////////// + + ICLASS_API CascadeClassifier* __stdcall CreateCascadeClassifier() + { + return new CascadeClassifier; + }; + ICLASS_API void __stdcall DestroyCascadeClassifier(CascadeClassifier* e) + { + delete e; + }; + + ICLASS_API bool __stdcall get_CascadeClassifier_empty(CascadeClassifier* e) + { + return e->empty(); + } + + ICLASS_API bool __stdcall get_CascadeClassifier_load(CascadeClassifier* e, char* filename) + { + return e->load(filename); + } + + + ICLASS_API bool __stdcall CascadeClassifier_isOldFormatCascade(CascadeClassifier* e) + { + return e->isOldFormatCascade(); + } + + ICLASS_API Size* __stdcall CascadeClassifier_getOriginalWindowSize(CascadeClassifier* e) + { + Size *s = new Size(e->getOriginalWindowSize()); + //*s = e->getOriginalWindowSize(); + return s; + } + + ICLASS_API int __stdcall CascadeClassifier_getFeatureType(CascadeClassifier* e) + { + return e->getFeatureType(); + } + + ICLASS_API int __stdcall CascadeClassifier_setImage(CascadeClassifier* e, Mat* m) + { + return e->setImage(*m); + } + + //ICLASS_API bool __stdcall CascadeClassifier_convert(CascadeClassifier* e, char* oldcascade, char* newcascade) + //{ + // return e->convert(oldcascade, newcascade); + // } +} \ No newline at end of file diff --git a/source/opencv_classes/opencv_classes.cpp b/source/opencv_classes/opencv_classes.cpp deleted file mode 100644 index b4a9b56..0000000 --- a/source/opencv_classes/opencv_classes.cpp +++ /dev/null @@ -1,151 +0,0 @@ -// opencv_classes.cpp: DLL. -// - -#include "stdafx.h" - -namespace cv -{ - //////////////////// Mat //////////////////// - ICLASS_API Mat* __stdcall CreateMat() - { - return new Mat; - }; - ICLASS_API bool __stdcall MatEmpty(Mat* e) - { - return e->empty(); - } - - ICLASS_API Mat* __stdcall CreateMatFromImage(IplImage* Image) - { - Mat *M = new Mat; - *M = cvarrToMat(Image);// default additional arguments: don't copy data. - //*M= Image; - return M; - } - - ICLASS_API int __stdcall GetMatData(Mat* e, int index, int param) - { - switch (index) - { - case 0: - return (int)e->elemSize(); - case 1: - return (int)e->elemSize1(); - case 2: - return (int)e->type(); - case 3: - return (int)e->depth(); - case 4: - return (int)e->channels(); - case 5: - return (int)e->step1(param); - case 6: - return (int)e->total(); - case 7: - return (int)e->flags; - case 8: - return (int)e->dims; - case 9: - return (int)e->rows; - case 10: - return (int)e->cols; - case 11: - return (int)e->data; - } - }; - - ICLASS_API void __stdcall DestroyMat(Mat* e) - { - delete e; - }; - - //////////////////// VidoCapture //////////////////// - ICLASS_API VideoCapture* __stdcall CreateVideoCapture() - { - return new VideoCapture; - }; - - ICLASS_API bool __stdcall VideoCaptureOpen(VideoCapture* e, int CamNumber) - { - return e->open(CamNumber); - }; - - ICLASS_API bool __stdcall VideoCaptureOpenFileName(VideoCapture* e, char* FileName) - { - return e->open(FileName); - }; - - ICLASS_API bool __stdcall VideoCaptureisOpened(VideoCapture* e) - { - return e->isOpened(); - }; - - ICLASS_API bool __stdcall VideoCaptureRead(VideoCapture* e, Mat** M) - { - Mat *_M = new Mat; - bool r=e->read(*_M); - *M = _M; - return r; - - }; - - ICLASS_API bool __stdcall VideoCaptureSet(VideoCapture* e, int propId, double value) - { - return e->set(propId, value); - } - - ICLASS_API double __stdcall VideoCaptureGet(VideoCapture* e, int propId) - { - return e->get(propId); - } - - ICLASS_API void __stdcall DestroyVideoCapture(VideoCapture* e) - { - delete e; - }; - - //////////////////// CascadeClassifier //////////////////// - - ICLASS_API CascadeClassifier* __stdcall CreateCascadeClassifier() - { - return new CascadeClassifier; - }; - ICLASS_API void __stdcall DestroyCascadeClassifier(CascadeClassifier* e) - { - delete e; - }; - - ICLASS_API bool __stdcall get_CascadeClassifier_empty(CascadeClassifier* e) - { - return e->empty(); - } - - ICLASS_API bool __stdcall get_CascadeClassifier_load(CascadeClassifier* e, char* filename) - { - return e->load(filename); - } - - - ICLASS_API bool __stdcall CascadeClassifier_isOldFormatCascade(CascadeClassifier* e) - { - return e->isOldFormatCascade(); - } - - ICLASS_API Size* __stdcall CascadeClassifier_getOriginalWindowSize(CascadeClassifier* e) - { - Size *s = new Size(e->getOriginalWindowSize()); - //*s = e->getOriginalWindowSize(); - return s; - } - - ICLASS_API int __stdcall CascadeClassifier_getFeatureType(CascadeClassifier* e) - { - return e->getFeatureType(); - } - - //ICLASS_API bool __stdcall CascadeClassifier_convert(CascadeClassifier* e, char* oldcascade, char* newcascade) - //{ -// return e->convert(oldcascade, newcascade); -// } - -} diff --git a/source/opencv_classes/opencv_classes.vcxproj b/source/opencv_classes/opencv_classes.vcxproj index 3a2bdc6..02cb538 100644 --- a/source/opencv_classes/opencv_classes.vcxproj +++ b/source/opencv_classes/opencv_classes.vcxproj @@ -163,6 +163,7 @@ + false false @@ -177,7 +178,8 @@ - + + Create Create diff --git a/source/opencv_classes/opencv_classes.vcxproj.filters b/source/opencv_classes/opencv_classes.vcxproj.filters index 7af2cb0..fa0d5b2 100644 --- a/source/opencv_classes/opencv_classes.vcxproj.filters +++ b/source/opencv_classes/opencv_classes.vcxproj.filters @@ -29,14 +29,20 @@ Файлы исходного кода - - Файлы исходного кода - Файлы исходного кода Файлы исходного кода + + Файлы исходного кода + + + Файлы исходного кода + + + Файлы исходного кода + \ No newline at end of file