C++ Qt之halcon如何读取像素项目
发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,这篇文章主要为大家展示了"C++ Qt之halcon如何读取像素项目",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"C++ Qt之halcon如何读取像素项
千家信息网最后更新 2025年02月23日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;i setCheckState(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;i rowCount();i++){ if(tableWidget->item(i, 0)->checkState() == Qt::Checked){ readfilelist.append(file_path+"/"+filenameList[i]); } } qDebug()< 以上是"C++ Qt之halcon如何读取像素项目"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
文件
项目
图像
目录
像素
C++
内容
图片
篇文章
学习
帮助
配置
代码
功能
实际
实际上
拷贝
按钮
易懂
更多
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
一个单位的网络安全
我的世界开服务器配置
ug数据库结构
三级数据库技术考试时间
dnfpk服务器
数据库程序代码怎么写
逍遥游朗读软件开发
软件开发中的检入检出
管理系统的数据库有多少表
数据库中什么是梭形
什么是物理服务器
数据库输入密码无法登录
南京定制软件开发服务电话
软件开发称呼的oss是什么
做实施需要掌握什么数据库
数据库怎么修改ip
河北ios软件开发平台
服务器管理界面没有信息
mcu独立的综合管理服务器
长沙致友软件开发公司
华为服务器的管理口
淘房科技互联网产业园
python怎么导数据库中
软件开发kpi考核三大指标
大学生与网络安全文明上网
幼儿园网络安全主题周
网络安全都考什么原因
计算机网络技术层面上的技术
将csv文件导入数据库
19年国家网络安全主题