Ermitteln von Bildzeiger in Visual C++



  • ich habe ein Prozedur in HDevelop erstellt,in der zb ein Bild eingelesen und bearbeitet wird.das "Prozedur" liefert ein neues Bild als Ausgabe zurück.
    die Frage ist, ich will in das Programm c++ den pointer dieses Biles auszulesen.

    das Programm

    ...
    HTuple*  NPointer;
    HTuple*  NType;
    HTuple  NWidth;
    HTuple  NHeight;
    
    //Das Bild aus Halcon(Prozedur.dvp) auslesen
    HObject NImage = proc_call2.GetOutputIconicParamObject("NewImage");
    //Bildgröße und seinem Pointer.. auslesen
    //diese Funktion liefert Fehler zurück	
    GetImagePointer1(h_Image, NPointer, NType, &NWidth, &NHeight);	
    ...
    

    Ich weiß nicht mehr was ich noch machen soll!! 😕

    danke im Voraus



  • Hallo Hexa.AH2000

    ich sehe in Deinem code keinen Fehler wahrscheinlich ist der Fehler eher in

    HImage NImage = proc_call2.GetOutputIconicParamObject("NewImage");
    

    wenn Du in Deutschland bis, dann bekommst Du gute Hilfe bei http://de.ids-imaging.com/

    Herzliche Grüsse
    Walter



  • diese Funktion GetImagePointer1() liefert Fehler zurück



  • Hexa.AH2000 schrieb:

    diese Funktion GetImagePointer1() liefert Fehler zurück

    Was sind denn die genauen Fehler ? Der Compiler wird ja konkrete Meldungen dazu machen, oder ?

    Ist get_image_pointer1() == GetImagePointer1() ?

    Nach einem Beispiel von halcon.de könnten fast alle Parameter falsch sein.

    Hobject  Image;
    char     typ[128];
    Hlong     width,height;
    unsigned char *ptr;
    
    read_image(&Image,"fabrik");
    get_image_pointer1(Image,(Hlong*)&ptr,typ,&width,&height);
    

    Wo beim TE h_Image herkommt ist voellig unklar.



  • Die per Google gefundene Deklaration bestätigt meine Annahme:

    Herror ::get_image_pointer1 (Hobject Image, 
                        long *Pointer, char* Type, long* Width, long *Height);
    


  • sorry für den Fehler "h_Image", es muss NImage statt h_Image sein.
    man verwendet meinst GetImagePointer1()(in C++) statt get_image_pointer1()(in Halcon11 Entwicklungsumgebung Hdevelop).

    GetImagePointer1(NImage, NPointer, NType, &NWidth, &NHeight)
    

    Der Compiler zeigt die folgende Meldung an:
    http://www.m-i-u.de/images-i75412bftyq5.png



  • Die Halcon Doku sagt:

    The operator GetImagePointer1 returns the value 2 (H_MSG_TRUE) if exactly one image was passed.
    The behavior in case of empty input (no input images available) is set
    via the operator SetSystem("no_object_result",<Result>).
    If necessary an exception is raised.

    Ich schliesse daraus,

    proc_call2.GetOutputIconicParamObject("NewImage");
    

    liefert kein Bild.



  • Hexa.AH2000 schrieb:

    sorry für den Fehler "h_Image", es muss NImage statt h_Image sein.
    man verwendet meinst GetImagePointer1()(in C++) statt get_image_pointer1()(in Halcon11 Entwicklungsumgebung Hdevelop).

    GetImagePointer1(NImage, NPointer, NType, &NWidth, &NHeight)
    

    Der Compiler zeigt die folgende Meldung an:
    http://www.m-i-u.de/images-i75412bftyq5.png

    Wir wissen jetzt also das Du Halcon11 mit C++ verwendest. Gut.

    Die Deklaration ist also z.B. diese

    void GetImagePointer1(const HObject& Image, HTuple* Pointer, HTuple* Type, HTuple* Width, HTuple* Height);
    

    siehe:
    http://www.halcon.de/halcon/download/documentation/reference_de-11/get_image_pointer1.html

    Ausser dem ersten Parameter sind alle anderen Rückgabewerte, die irgendwo
    zurückgegeben werden müssen. Deine NPointer und NType zeigen aber nirgendwo hin!

    Dein Programm

    Hexa.AH2000 schrieb:

    ...
    HTuple*  NPointer;
    HTuple*  NType;
    HTuple  NWidth;
    HTuple  NHeight;
    
    //Das Bild aus Halcon(Prozedur.dvp) auslesen
    HObject NImage = proc_call2.GetOutputIconicParamObject("NewImage");
    //Bildgröße und seinem Pointer.. auslesen
    //diese Funktion liefert Fehler zurück	
    GetImagePointer1(NImage, NPointer, NType, &NWidth, &NHeight);	
    ...
    

    Stürzt also nicht ohne Grund bei GetImagePointer1() ab ...

    Die Referenz sagt auch, das es Alternativen gibt; z.B.:

    HTuple HImage::GetImagePointer1(HTuple* Type, HTuple* Width, HTuple* Height) const;
    

    Was dann so weitergehen könnte ...

    HImage  Image;
    HTuple  Width, Height, Type, Pointer;
    
    ...
    
    Pointer = Image.GetImagePointer1(&Type, &Width, &Height);
    

    Und da sieht man auch was in Deinem Code nicht stimmt ...



  • ich werde den Vorschlag von merano testen.

    HImage  Image;
    HTuple  Width, Height, Type, Pointer;
    
    ...
    
    Pointer = Image.GetImagePointer1(&Type, &Width, &Height);
    

    Danke Leute für eure Hilfe. 🙂


Anmelden zum Antworten