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_NAMESPACEclass MainWindow : public QMainWindow
{Q_OBJECTpublic: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的界面和交互性提升用戶體驗。