如何用C++调用halcon函数?

2024-12-18 22:37:08
推荐回答(1个)
回答1:

  1. 下面是一个用C++调用halcon函数的实例,说明://后面的部分为程序的说明,在程序运行中是不起作用的。

  2. a)  gen_image1_extern函数中的变量width,height必须为HTuple类型,Pointer指针为unsignedchar类型,输入时转换为long型。

    b)  width,height必须与Pointer指向的图像数据的长宽一致。

    c)  Pointer指针在gen_image1_extern函数调用之前分配了内存,之后不要马上释放,否则会出错。应该在确保不再使用Image变量之后再释放。halcon内部会自动释放Image,感觉没有释放Pointer(还需要进一步验证)。

    d)  显示图像时,可能存在着图像的上下翻转,可以按照1中的方法,将图像数据翻转后再调用gen_image1_extern,或者使用halcon中的函数mirror_image()进行翻转。

  3. BITMAPINFO*RotateBmpInfo;

    BYTE*bitBuffer;

    bitBuffer=NULL;

    bitBuffer=newBYTE[sizeof(BITMAPINFO)];

    RotateBmpInfo=(BITMAPINFO*)bitBuffer;

    RotateBmpInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);

    RotateBmpInfo->bmiHeader.biHeight     =Height;

    RotateBmpInfo->bmiHeader.biWidth     =Width;

    RotateBmpInfo->bmiHeader.biPlanes     =1;

    RotateBmpInfo->bmiHeader.biBitCount=24;

    RotateBmpInfo->bmiHeader.biCompression  =BI_RGB;

    RotateBmpInfo->bmiHeader.biSizeImage      =Height*bytewidth;

    RotateBmpInfo->bmiHeader.biXPelsPerMeter=0;

    RotateBmpInfo->bmiHeader.biYPelsPerMeter=0;

    RotateBmpInfo->bmiHeader.biClrUsed         =0;

    RotateBmpInfo->bmiHeader.biClrImportant  =0;

    CWnd*m_pWnd;

    m_pWnd=AfxGetApp()->GetMainWnd();

    CDC*pDC=m_pWnd->GetDC();

    ::StretchDIBits(

    pDC->GetSafeHdc(),

    Width+10,

    Height+10,

  4. 从VC++到Halcon

    unsignedchar*Pointer;
    intwidth,height;
    Pointer=newunsignedchar[width*height];
    inti,j;
    for(i=0;i{
    for(j=0;j{
    Pointer[i*width+j]=j%255;
    }
    }
    HobjectImage;
    gen_image1_extern(&Image,"byte",(HTuple)width,(HTuple)height,(long)Pointer,NULL);