千家信息网

C++ Qt之halcon如何读取像素项目

发表于:2024-11-19 作者:千家信息网编辑
千家信息网最后更新 2024年11月19日,这篇文章主要为大家展示了"C++ Qt之halcon如何读取像素项目",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ Qt之halcon如何读取像素项
千家信息网最后更新 2024年11月19日C++ Qt之halcon如何读取像素项目

这篇文章主要为大家展示了"C++ Qt之halcon如何读取像素项目",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ Qt之halcon如何读取像素项目"这篇文章吧。

项目环境:win10,qt5.14,halcon20

功能:1.读取指定图像2.读取指定目录下的图像

项目配置文件

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/ -lhalcon   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconc   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcpp   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcppxl   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconcxl   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhalconxl   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhdevenginecpp   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -lhdevenginecppxl   LIBS += -L$$PWD/halcon/win/lib/x64-win64/ -llibiomp5md    #INCLUDEPATH += $$PWD/halcon/win/include   #DEPENDPATH += $$PWD/halcon/win/include    INCLUDEPATH += $$PWD/halcon/linux/include   DEPENDPATH += $$PWD/halcon/linux/include}  unix:{   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalcon   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconc   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconcpp   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconcppxl   LIBS += -L$$PWD/halcon/linux/lib/x64-linux/ -lhalconcxl   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhalconxl   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhdevenginecpp   LIBS += -L$$PWD/halcon/linux/lib/x64-linux -lhdevenginecppxl    INCLUDEPATH += $$PWD/halcon/linux/include   DEPENDPATH += $$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;     HTuple  hv_WindowHandle;    //HTuple  hv_AcqHandle;    HObject  ho_Image;    HTuple  hv_Width, hv_Height;    //Hlong windID;    Hlong  MainWndID;     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++文件

#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("open  file"),".",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)    {        HTuple  hv_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)        {            HTuple  hv_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)        {            HTuple  hv_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如何读取像素项目"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

0