C++|C++ Qt之halcon读取像素项目过程详解

项目环境:win10,qt5.14,halcon20
功能:1.读取指定图像2.读取指定目录下的图像
C++|C++ Qt之halcon读取像素项目过程详解
文章图片

C++|C++ Qt之halcon读取像素项目过程详解
文章图片

项目配置文件

QT+= core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use# any Qt feature that has been marked deprecated (the exact warnings# depend on your compiler). Please consult the documentation of the# deprecated API in order to know how to port your code away from it.DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if it uses deprecated APIs.# In order to do so, uncomment the following line.# You can also select to disable deprecated APIs only up to a certain version of Qt.#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000# disables all the APIs deprecated before Qt 6.0.0 SOURCES += \main.cpp \widget.cpp HEADERS += \widget.h # Default rules for deployment.qnx: target.path = /tmp/$${TARGET}/binelse: unix:!android: target.path = /opt/$${TARGET}/bin!isEmpty(target.path): INSTALLS += target #win32和unix下的include实际上是一样的win32:{#halcon配置代码,已经将include、lib拷贝到项目之下LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcppLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcppxlLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcxlLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconxlLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhdevenginecppLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhdevenginecppxlLIBS += -L$$PWD/halcon/win/lib/x64-win64/ -llibiomp5md #INCLUDEPATH += $$PWD/halcon/win/include#DEPENDPATH += $$PWD/halcon/win/include INCLUDEPATH += $$PWD/halcon/linux/includeDEPENDPATH += $$PWD/halcon/linux/include} unix:{LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconcLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconcppLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconcppxlLIBS += -L$$PWD/halcon/linux/lib/x64-linux/ -lhalconcxlLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconxlLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhdevenginecppLIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhdevenginecppxl INCLUDEPATH += $$PWD/halcon/linux/includeDEPENDPATH += $$PWD/halcon/linux/include}

头文件
#ifndef WIDGET_H#define WIDGET_H #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "halconcpp/HalconCpp.h"#include "Halcon.h" using namespace HalconCpp; #pragma execution_character_set("utf-8") //支持中文 class Widget : public QWidget{Q_OBJECT public:Widget(QWidget *parent = nullptr); ~Widget(); private:QLabel *image_label; HTuplehv_WindowHandle; //HTuplehv_AcqHandle; HObjectho_Image; HTuplehv_Width, hv_Height; //Hlong windID; HlongMainWndID; QGroupBox *groupbox1; QRadioButton *radio1; QRadioButton *radio2; QStackedWidget *stackedwidget; QWidget *page1; QWidget *page2; QLineEdit *ledit1; QPushButton *btn1; QLineEdit *ledit2; QPushButton *btn2; QTableWidget *tableWidget; QTableWidgetItem *item0; QString file_path; QStringList filenameList; //QStringList fullfilename; QPushButton *btn3; void create_widget(); void filelist_refresh(); QStringList readfilelist; QString file_name1; QString file_name2; int imageNo=0; /*enum CellType{ct_isUsed,ct_rowNo}; enum FieldColNum{col_isUsed,col_rowNo}; QLabel *labCellIndex; QLabel *labCellType; QLabel *labID; void createItemsARow(bool isUsed,int rowNo,QString FileName); */ private slots:void on_radioButton1_clicked(); void on_radioButton2_clicked(); void on_btn1_clicked(); void on_btn2_clicked(); void on_btn3_clicked(); //void on_item_clicked(QTableWidgetItem * item); void on_checkchangestate(int, int); //void slotHeaderClicked(int); }; #endif // WIDGET_H

【C++|C++ Qt之halcon读取像素项目过程详解】c++文件
#include "widget.h" Widget::Widget(QWidget *parent): QWidget(parent){create_widget(); connect(radio1,SIGNAL(clicked(bool)),this,SLOT(on_radioButton1_clicked())); connect(radio2,SIGNAL(clicked(bool)),this,SLOT(on_radioButton2_clicked())); connect(btn1,SIGNAL(clicked(bool)),this,SLOT(on_btn1_clicked())); connect(btn2,SIGNAL(clicked(bool)),this,SLOT(on_btn2_clicked())); connect(btn3,SIGNAL(clicked(bool)),this,SLOT(on_btn3_clicked())); connect(tableWidget, SIGNAL(cellClicked(int, int)), this, SLOT(on_checkchangestate(int, int))); //connect(tableWidget->horizontalHeader(), SIGNAL(sectionClicked(int)), this, SLOT(slotHeaderClicked(int))); } Widget::~Widget(){} void Widget::create_widget(){this->setFixedSize(916,547); this->setWindowTitle("图像读取"); image_label =new QLabel(this); image_label->setGeometry(290,20,611,461); MainWndID = (Hlong)this->image_label->winId(); SetWindowAttr("background_color","gray"); //设置背景为灰色OpenWindow(0, 0, image_label->width(), image_label->height(), MainWndID,"visible", "", &hv_WindowHandle); HDevWindowStack::Push(hv_WindowHandle); groupbox1 = new QGroupBox(this); groupbox1->setGeometry(10,20,261,121); QLabel *label1 =new QLabel(this->groupbox1); label1->setText("采集模式"); label1->setGeometry(0,0,261,21); radio1 = new QRadioButton(tr("指定图像"),this->groupbox1); radio2 = new QRadioButton(tr("文件目录"),this->groupbox1); radio1->setGeometry(50,40,100,20); radio2->setGeometry(50,70,100,20); radio1->setChecked(true); stackedwidget = new QStackedWidget(this); stackedwidget->setGeometry(20,160,251,301); page1 = new QWidget(); QLabel *label2 =new QLabel(page1); label2->setGeometry(0,0,100,20); label2->setText("指定图片"); ledit1 = new QLineEdit(page1); //ledit1->setGeometry(30,130,150,30); ledit1->setGeometry(0,130,200,30); ledit1->setReadOnly(true); btn1 = new QPushButton(page1); btn1->setGeometry(200,130,30,30); btn1->setIcon(style()->standardIcon(QStyle::SP_FileDialogContentsView)); page2 = new QWidget(); QLabel *label3 =new QLabel(page2); label3->setGeometry(0,0,100,20); label3->setText("文件目录"); ledit2 = new QLineEdit(page2); ledit2->setGeometry(30,30,150,30); btn2 = new QPushButton(page2); btn2->setGeometry(180,30,30,30); btn2->setIcon(style()->standardIcon(QStyle::SP_FileDialogContentsView)); //QTableWidget *tableWidget = new QTableWidget(10,3,page2); tableWidget = new QTableWidget(page2); //QTableWidget *tableWidget = new QTableWidget(page2); tableWidget->setRowCount(0); tableWidget->setColumnCount(3); //page2->addWidget(); tableWidget->setGeometry(0,70,251,230); //tableWidget->resizeColumnsToContents(); //tableWidget->resizeRowsToContents(); //tableWidget->setColumnWidth(3,200); tableWidget->setColumnWidth(0,50); tableWidget->setColumnWidth(1,50); //tableWidget->setColumnWidth(2,QHeaderView::Stretch); tableWidget->setColumnWidth(2,120); //tableWidget->setRowHeight(3,60); tableWidget->verticalHeader()->setVisible(false); //隐藏列表头//tableWidget->horizontalHeader()->setVisible(false); //隐藏行表头 tableWidget->show(); QStringList headerText; headerText<<"选取"<<"索引"<<"文件名"; tableWidget->setHorizontalHeaderLabels(headerText); tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); tableWidget->horizontalHeader()->setDisabled(true); //禁止用户拖动改变列宽tableWidget->verticalHeader()->setDisabled(true); //设置行不能拖动//tableWidget->setEnabled(false); stackedwidget->addWidget(page1); stackedwidget->addWidget(page2); btn3 = new QPushButton(this); btn3->setGeometry(540,505,91,31); btn3->setText("执行"); } void Widget::on_radioButton1_clicked(){qDebug()<<"1"; stackedwidget->setCurrentIndex(0); } void Widget::on_radioButton2_clicked(){qDebug()<<"2"; stackedwidget->setCurrentIndex(1); } void Widget::on_btn1_clicked(){qDebug()<<"btn1"; qDebug() << "按下了1号按钮,读取图片"; file_name1 = QFileDialog::getOpenFileName(this,tr("openfile"),".",tr("Video Files(*.bmp *.jpg *.pbm *.pgm *.png *.ppm *.xbm *.xpm *.jpeg)")); ledit1->setText(file_name1); } void Widget::on_btn2_clicked(){//imageNo = 0; qDebug()<<"btn2"; qDebug() << "按下了2号按钮,读取图片"; try{ file_path = QFileDialog::getExistingDirectory(this,tr("Open Directory"),"./"); qDebug() << file_path; ledit2->setText(file_path); QDir dir(file_path); //cout<<"bian li kai shi "<clearContents(); tableWidget->setRowCount(filenameList.count()); for(int i=0; isetCheckState(Qt::Checked); tableWidget->setItem(i, 0, item0); QTableWidgetItem *item1 = new QTableWidgetItem(QString::number(i)); tableWidget->setItem(i, 1, item1); QTableWidgetItem *item2 = new QTableWidgetItem(filenameList[i]); tableWidget->setItem(i, 2, item2); } filelist_refresh(); }catch (HException &HDevExpDefaultException){HTuplehv_Exception; HDevExpDefaultException.ToHTuple(&hv_Exception); } } void Widget::on_btn3_clicked(){qDebug() << "按下了3号按钮,读取图片"; ClearWindow(hv_WindowHandle); if(radio1->isChecked()){//显示指定图片try{//QString file_name; QString image; if(file_name1.isNull()){image = ""; }else{image=file_name1; }ReadImage(&ho_Image,image.toLatin1().data()); GetImageSize(ho_Image, &hv_Width, &hv_Height); SetPart(hv_WindowHandle, 0, 0, hv_Height, hv_Width); DispObj(ho_Image, HDevWindowStack::GetActive()); }catch (HException &HDevExpDefaultException){HTuplehv_Exception; HDevExpDefaultException.ToHTuple(&hv_Exception); } }else if(radio2->isChecked()){//显示文件目录下选取图像]if(imageNo>=readfilelist.count()){imageNo=0; }try{//QString file_name; QString image; if(readfilelist.isEmpty()){image=""; }else{image = readfilelist[imageNo]; }ReadImage(&ho_Image,image.toLatin1().data()); GetImageSize(ho_Image, &hv_Width, &hv_Height); SetPart(hv_WindowHandle, 0, 0, hv_Height, hv_Width); DispObj(ho_Image, HDevWindowStack::GetActive()); imageNo++; }catch (HException &HDevExpDefaultException){HTuplehv_Exception; HDevExpDefaultException.ToHTuple(&hv_Exception); }} } void Widget::on_checkchangestate(int value1, int value2){ if(value2==0&&tableWidget->item(value1, value2)->checkState() == Qt::Checked){qDebug()<<"选中"; }else if(value2==0&&tableWidget->item(value1, value2)->checkState() == Qt::Unchecked){qDebug()<<"未选中"; }filelist_refresh(); } void Widget::filelist_refresh(){imageNo = 0; readfilelist.clear(); for(int i=0; irowCount(); i++){if(tableWidget->item(i, 0)->checkState() == Qt::Checked){readfilelist.append(file_path+"/"+filenameList[i]); }}qDebug()<
到此这篇关于C++ Qt之halcon读取像素项目过程详解的文章就介绍到这了,更多相关C++ Qt之halcon读取像素项目内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    推荐阅读