Laex / Delphi-OpenCV

Project Delphi-OpenCV. Translation of OpenCV library header files in Delphi
500 stars 226 forks source link

FeatureDetector 64 bit problem #153

Closed hafedh-trimeche closed 2 years ago

hafedh-trimeche commented 2 years ago

Hi,

Please note that FeatureDetector compiled with 64 bit as target, caused an exception. The 32 bit version worked well.

bds_ciRmB27u9A

Best regards.

hafedh-trimeche commented 2 years ago

I solved the problem by introducing function naming related to CPUX64 (function's name same as located into the DLL). ocv.cls.contrib and ocv.cls.features2d are impacted ; may other units be.

PPEE_pU7Mi5sqIQ

{ TFeatureDetector }

{$IFDEF CPUX64}
function Create_FeatureDetector(const detectorType: pAnsiChar):TOpenCVClass;stdcall;external opencv_classes_lib delayed;
function Empty_FeatureDetector(const F: TOpenCVClass): cbool;stdcall;external opencv_classes_lib delayed;
procedure detect_FeatureDetector(const F:TOpenCVClass;image:PIplImage;var keypointcount:Integer;var keypoints:pKeyPoint;mask:PIplImage);stdcall;external opencv_classes_lib delayed;
{$ELSE}
function Create_FeatureDetector(const detectorType: pAnsiChar): TOpenCVClass; stdcall;
  external opencv_classes_lib name '_Create_FeatureDetector@4' delayed;
function Empty_FeatureDetector(const F: TOpenCVClass): cbool; stdcall; external opencv_classes_lib name '_Empty_FeatureDetector@4' delayed;
procedure detect_FeatureDetector(const F: TOpenCVClass; image: PIplImage; Var keypointcount: Integer; Var keypoints: pKeyPoint;
  mask: PIplImage); stdcall; external opencv_classes_lib name '_detect_FeatureDetector@20' delayed;
{$ENDIF}

{ TDescriptorExtractor }

{$IFDEF CPUX64}
function Create_DescriptorExtractor(const descriptorExtractorType:pAnsiChar):TOpenCVClass;stdcall;external opencv_classes_lib delayed;
function Empty_DescriptorExtractor(const F:TOpenCVClass):cbool;stdcall;external opencv_classes_lib delayed;
procedure compute_DescriptorExtractor(const F:TOpenCVClass;image:PIplImage;keypointcount:Integer;keypoints:pKeyPoint;var mask:TOpenCVClass);stdcall;external opencv_classes_lib delayed;
function descriptorSize_DescriptorExtractor(const F:TOpenCVClass):Integer;stdcall;external opencv_classes_lib delayed;
function descriptorType_DescriptorExtractor(const F:TOpenCVClass):Integer;stdcall;external opencv_classes_lib delayed;
{$ELSE}
function Create_DescriptorExtractor(const descriptorExtractorType:pAnsiChar):TOpenCVClass;stdcall;external opencv_classes_lib name '_Create_DescriptorExtractor@4' delayed;
function Empty_DescriptorExtractor(const F: TOpenCVClass): cbool; stdcall; external opencv_classes_lib name '_Empty_DescriptorExtractor@4' delayed;
procedure compute_DescriptorExtractor(const F: TOpenCVClass; image: PIplImage; keypointcount: Integer; keypoints: pKeyPoint;
  Var mask: TOpenCVClass); stdcall; external opencv_classes_lib name '_compute_DescriptorExtractor@20' delayed;
function descriptorSize_DescriptorExtractor(const F: TOpenCVClass): Integer; stdcall;
  external opencv_classes_lib name '_descriptorSize_DescriptorExtractor@4' delayed;
function descriptorType_DescriptorExtractor(const F: TOpenCVClass): Integer; stdcall;
  external opencv_classes_lib name '_descriptorType_DescriptorExtractor@4' delayed;
{$ENDIF}

Best regards.