Qt联合Halcon开发二:Halcon窗口绑定Qt控件显示Hobject图像【详细图解流程】

1. 项目准备

在本项目中,我们将使用Qt框架与Halcon库结合,展示图像并进行图像处理。首先,确保你已经配置好Qt和Halcon的开发环境。

环境配置可查看上篇文章

2. 创建Qt界面

在Qt中,创建一个窗口并拖入按钮和Graphics View控件。Graphics View控件将用于显示Halcon的图像。设置布局使控件能够自动调整大小和位置。

3. 设置Halcon窗口句柄

mainwindow.h中,我们定义一个全局的Halcon窗口句柄hv_window,用于在其他函数中访问和操作Halcon窗口。

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "HalconCpp.h"
QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    // 创建Halcon窗口句柄
    HalconCpp::HTuple hv_window;
};
#endif // MAINWINDOW_H

4. 绑定Halcon窗口和Qt控件

MainWindow的构造函数中,我们使用HalconCpp::OpenWindow函数将Halcon的窗口与Qt的Graphics View控件绑定。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "HalconCpp.h"
#include <QDebug>
using namespace HalconCpp;

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    
    // 打开Halcon窗口并绑定到Qt控件
    HalconCpp::OpenWindow(0, 0, 500, 500, static_cast<Hlong>(ui->graphicsView->winId()), "", "", &hv_window);
}

MainWindow::~MainWindow()
{
    delete ui;
}

此时,你应该能看到一个黑色窗口,表示Halcon窗口已经成功绑定到Qt控件上。

5. 加载并显示图像

在按钮的响应函数中,我们加载一张图像,并使用HalconCpp::DispImage函数显示图像。

void MainWindow::on_pushButton_clicked()
{
    // 读取图像文件
    HObject ho_Image;
    ReadImage(&ho_Image, "1.jpg");

    // 显示图像到Halcon窗口
    HalconCpp::DispImage(ho_Image, hv_window);
}

此时,当你点击按钮时,Halcon窗口将显示加载的图像。

6. 调整窗口尺寸以显示完整图像

当图像的分辨率大于窗口的尺寸时,图像会被部分显示。为了确保完整显示图像,我们可以根据图像的尺寸调整窗口的显示区域。

void MainWindow::on_pushButton_clicked()
{
    // 读取图像文件
    HObject ho_Image;
    ReadImage(&ho_Image, "1.jpg");

    // 获取图像尺寸
    HTuple hv_width, hv_height;
    HalconCpp::GetImageSize(ho_Image, &hv_width, &hv_height);

    // 设置窗口显示区域,确保完整显示图像
    HalconCpp::SetPart(hv_window, 0, 0, hv_height - 1, hv_width - 1);

    // 显示图像
    HalconCpp::DispImage(ho_Image, hv_window);
}

在这里,HalconCpp::SetPart的作用是设置Halcon窗口中显示图像的部分。参数(0, 0, hv_height-1, hv_width-1)表示从图像的左上角(0, 0)到右下角(hv_width-1, hv_height-1)的区域。

7. 为什么窗口的设置是(0, 0, hv_height-1, hv_width-1)

HalconCpp::SetPart函数用于调整窗口的显示区域,其参数是行列坐标。因此,图像的宽度是hv_width,高度是hv_height,但HalconCpp中的行列坐标从0开始,因此设置的窗口区域应是(0, 0, hv_height-1, hv_width-1)

8. 总结

通过将Halcon窗口绑定到Qt控件,我们可以轻松地在Qt界面中显示和操作Halcon图像。通过调整窗口的显示区域,可以确保图像完整显示,避免显示不完全的问题。

这种集成方式可以为开发者提供强大的图像处理功能,同时利用Qt的界面和交互性提升用户体验。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客晨风

感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值