AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

C/C++ umsetzung nach Delphi

Ein Thema von alf.stefan · begonnen am 4. Nov 2008 · letzter Beitrag vom 5. Nov 2008
Antwort Antwort
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#1

C/C++ umsetzung nach Delphi

  Alt 4. Nov 2008, 07:57
Hallo zusammen

Ich bin dabei die Funktionalität von openCV in Delphi zu erweitern. Jetzt bin ich auf ein Problem gestoßen. Und zwar cvMat

in der doku zu cxCore steht

Zitat:
CvMat

Multi-channel matrix

typedef struct CvMat
{
int type; /* CvMat signature (CV_MAT_MAGIC_VAL), element type and flags */
int step; /* full row length in bytes */

int* refcount; /* underlying data reference counter */

union
{
uchar* ptr;
short* s;
int* i;
float* fl;
double* db;
} data; /* data pointers */

#ifdef __cplusplus
union
{
int rows;
int height;
};

union
{
int cols;
int width;
};
#else
int rows; /* number of rows */
int cols; /* number of columns */
#endif

} CvMat;
in OpenCv.pas das ich benutze steht

Delphi-Quellcode:
  

 CV_MAT_TYPE_MASK = 31;
 CV_MAT_MAGIC_VAL = $42420000;
 CV_MAT_CONT_FLAG_SHIFT = 9;
 CV_MAT_CONT_FLAG = 1 shl CV_MAT_CONT_FLAG_SHIFT;

 CV_MAT_CN_MASK = 3 shl 3;
 CV_MAT_DEPTH_MASK = 7;


TMatData = record
               ptr: PUCHAR;
             end;

  CvMat = record
            type_ : Integer;
            step : Integer;
            refcount : PInteger;
            data : TMatData;
            rows : Integer;
            cols : Integer;
          end;
  TCvMat = CvMat;
wenn ich jetzt eine matrizze erzeuge in etwa so
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var

  mat : pcvMat;
  refcount : integer;

begin
    mat := cvCreateMat(3,2, 8);
    refcount := mat.refcount^;
    ShowMessage(intToStr(refcount));
end;
und mir die Matrize anschaue dann ist
mat $392A00
mat^ (1111638024, 4, $392A60, ($1), 3746432, 3)

wobei 1111638024 $42424008 als hex ist und mit CV_MAT_MAGIC_VAL verundet 8 ergibt, was ja auch sinn macht als type_
die 4 als step
$392A60 ist dann ja wohl der der poinnter auf refcount und da steht dann in mat^.refcount^ 1 drin!
bis hierher ist ja noch alles mehr oder weniger begreiflich
aber was ist denn das ($1)?
das soll ein Pointer auf die daten der Matrix sein! Und da kommt dann auch ein Fehler.
3746432 sind auch nicht meine eingetragenen reihen!
komischerweise erscheint der reihen wert dann als col wert als letztes element.

Kann damit jemand was anfangen und mir etwas weiterhelfen??


Gruß stefan
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.006 Beiträge
 
Delphi 12 Athens
 
#2

Re: C/C++ umsetzung nach Delphi

  Alt 4. Nov 2008, 20:01
Die Deklaration von TMatData sieht mir etwas ärmlich aus gegenüber der C-Deklaration der entsprechenden Union.
Uwe Raabe
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: C/C++ umsetzung nach Delphi

  Alt 4. Nov 2008, 20:05
Das equivalent von union sind übrigens Variante Records (um dir den richtigen Suchbegriff zu liefern)
  Mit Zitat antworten Zitat
alf.stefan

Registriert seit: 11. Apr 2003
88 Beiträge
 
Delphi 7 Professional
 
#4

Re: C/C++ umsetzung nach Delphi

  Alt 5. Nov 2008, 08:27
Ja! Danke für die Anregungen, damit habe ich es glaube ich geschaft.

Die deklaration sieht jetzt so aus

Delphi-Quellcode:
  CvMat = record
            type_ : Integer;
            step : Integer;
            refcount : ^LongInt;
            size : integer;
            data : record
              case longint of
                 0 : ( ptr : ^uchar );
                 1 : ( fl : ^double );
                 2 : ( db : ^double );
                 3 : ( i : ^longint );
                 4 : ( s : ^smallint );
              end;
            rows : Integer;
            cols : Integer;
          end;
und damit kann ich die matrize füllen und lesen.

Dank&Gruß

Stefan
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz