当前位置: 首页 > news >正文

记录MFC联合halcon界面显示开发

要将 Halcon 的测试效果显示在 MFC 程序的界面中,你可以通过以下步骤实现。基本思路是在 MFC 窗口中创建一个合适的区域来显示 Halcon 处理后的图像和图形,通常可以使用 CStatic 控件作为显示区域,并通过 Halcon 的 C++ 接口(HalconCpp)将处理结果绘制到该区域上。

以下是一个简单的示例代码,展示了如何在 MFC 对话框程序中集成 Halcon 图像显示和处理:

  1. 创建 MFC 对话框工程:使用 Visual Studio 创建一个新的 MFC 对话框应用程序项目。

  2. 添加 Halcon 库引用

    • 在项目属性中,将 Halcon 的头文件目录和库文件目录添加到项目的包含目录和库目录中。
    • 链接 Halcon 的库文件(如 halconcpp.lib 等)。
  3. 在对话框资源中添加一个 CStatic 控件:用于显示 Halcon 的处理结果。假设该控件的 ID 为 IDC_DISPLAY_STATIC

  4. 编写代码

    // 在对话框类的头文件(.h)中添加以下内容
    #include <HalconCpp.h>
    using namespace HalconCpp;
    
    class CYourDialog : public CDialogEx
    {
        // 其他成员变量和函数...
    
    private:
        HObject ho_Image; // 用于存储 Halcon 图像
        HTuple hv_WindowHandle; // 用于存储显示窗口句柄
    
    public:
        CYourDialog(CWnd* pParent = nullptr);   // 标准构造函数
    
        // 用于初始化 Halcon 显示的函数
        void InitHalconDisplay();
    
        // 用于处理 Halcon 图像并显示结果的函数
        void ProcessAndDisplayImage();
    
        // 析构函数,释放资源
        ~CYourDialog();
    
        // 其他成员函数...
    };

// 在对话框类的实现文件(.cpp)中添加以下内容

// 初始化 Halcon 显示
void CYourDialog::InitHalconDisplay()
{
    // 获取显示控件的句柄
    CWnd* pWnd = GetDlgItem(IDC_DISPLAY_STATIC);
    if (pWnd == nullptr)
    {
        return;
    }

    // 获取控件的矩形区域
    CRect rect;
    pWnd->GetClientRect(&rect);

    // 打开 Halcon 显示窗口并关联到控件
    OpenWindow(0, 0, rect.Width(), rect.Height(), (Hlong)pWnd->m_hWnd, "visible", "", &hv_WindowHandle);
}

// 处理 Halcon 图像并显示结果
void CYourDialog::ProcessAndDisplayImage()
{
    try
    {
        // 读取图像
        ReadImage(&ho_Image, "your_image_path.jpg");

        // 设置绘图颜色为红色
        SetColor(hv_WindowHandle, "red");
        SetLineWidth(hv_WindowHandle, 3);

        // 检测圆(这里使用简单示例,你可以替换为实际的处理逻辑)
        HObject ho_CircleContours;
        FindCircles(ho_Image, &ho_CircleContours, "tukey", 5, 3, 10, 20, 0.8, 100, 500);

        // 显示所有检测到的圆,标记为红色
        DispObj(ho_CircleContours, hv_WindowHandle);

        // 可以继续添加其他处理和显示逻辑,如坐标筛选和再次标记等

    }
    catch (HalconCpp::HException& ex)
    {
        AfxMessageBox(ex.ErrorMessage());
    }
}

// 对话框的初始化函数,调用初始化和处理显示函数
BOOL CYourDialog::OnInitDialog()
{
    CDialogEx::OnInitDialog();

    // 初始化 Halcon 显示
    InitHalconDisplay();

    // 处理并显示图像
    ProcessAndDisplayImage();

    return TRUE;  // return TRUE unless you set the focus to a control
}

// 析构函数,释放资源
CYourDialog::~CYourDialog()
{
    // 关闭 Halcon 显示窗口
    if (IsWindow(hv_WindowHandle))
    {
        CloseWindow(hv_WindowHandle);
    }
}

代码说明:

  1. 头文件部分:在对话框类的头文件中包含 HalconCpp.h 头文件,并定义了用于存储 Halcon 图像和显示窗口句柄的成员变量,以及初始化显示、处理并显示图像的成员函数声明。
  2. InitHalconDisplay 函数:获取 MFC 对话框中用于显示的 CStatic 控件的句柄和矩形区域,然后使用 OpenWindow 函数在该控件区域内打开一个 Halcon 显示窗口。
  3. ProcessAndDisplayImage 函数:实现了读取图像、设置绘图颜色、检测圆并显示圆轮廓的功能。你可以根据实际需求替换为更复杂的 Halcon 处理逻辑。
  4. OnInitDialog 函数:在对话框初始化时,调用 InitHalconDisplay 和 ProcessAndDisplayImage 函数,完成显示窗口的初始化和图像的处理与显示。
  5. 析构函数:在对话框销毁时,关闭 Halcon 显示窗口,释放相关资源。

 

 

相关文章:

  • 查询NFT图片地址
  • 42 session反序列化漏洞
  • JavaWeb25.02.27
  • 【前端】XML,XPATH,与HTML的关系
  • 推荐算法工程师的技术图谱和学习路径
  • 实验环境搭建集锦(docker linux ros2+强化学习环境+linux上单片机串口调试)
  • Kylin麒麟操作系统服务部署 | Nginx服务部署
  • BRD4缺失通过GRP78灭活内质网应激,延缓脱氢表雄酮诱导的卵巢颗粒细胞凋亡
  • 波导阵列天线 学习笔记11双极化全金属垂直公共馈电平板波导槽阵列天线
  • 【技术笔记】Cadence 实现原理图元器件的自动标号
  • [教程]在CentStream 9简单部署一个Nginx web服务器
  • 基于多层感知机(MLP)实现MNIST手写体识别
  • SpringBoot Maven 项目 pom 中的 plugin 插件用法整理
  • [高等数学] 定积分的概念与性质
  • 《从入门到精通:蓝桥杯编程大赛知识点全攻略》(十八)-农夫约翰的奶酪块、蛋糕游戏、奶牛体检
  • linux 后台执行并输出日志
  • Filp动画
  • 大数据SQL调优专题——底层调优
  • OpenCV(11):人脸检测、物体识别
  • Ubuntu本地使用AnythingLLM
  • seo网站建设/排名优化关键词公司
  • 拆分网站开发/网络营销推广方式有哪些
  • 设计公司起名怎么起好/全国推广优化网站
  • 中国室内设计网站官网/永久免费不收费的污染app
  • 电子商务网站开发/国际新闻大事
  • 网站建设和网站推广可以同一家做吗/如何做网销