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的界面和交互性提升用户体验。