qt+halcon实战

注意建QT工程项目用的是MSVC,如果选成MinGW,则会报错


 

INCLUDEPATH += $$PWD/include
INCLUDEPATH += $$PWD/include/halconcpp

LIBS += $$PWD/lib/x64-win64/halconcpp.lib
LIBS += $$PWD/lib/x64-win64/halcon.lib

#include "halconcpp/HalconCpp.h"
#include "Halcon.h"
#include "HDevThread.h"

using namespace HalconCpp;


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QDebug"
#include "QFileDialog"
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    Hlong windID=(Hlong)this->ui->graphicsView->winId();
    qDebug()<<ui->graphicsView->width()<< " : "<<ui->graphicsView->height();
    HalconCpp::OpenWindow(0,0,ui->graphicsView->width(),ui->graphicsView->height() ,windID, "visible" , "red",&hv_WindowHandle);
    SetPart(hv_WindowHandle,0,0,960,1280);
    SetDraw(hv_WindowHandle,"margin");
    SetColor(hv_WindowHandle,"red");
}

MainWindow::~MainWindow()
{
    delete ui;
}


void MainWindow::on_pushButton_clicked()
{

    QString path=QFileDialog::getOpenFileName(this,"Select Imagee","","(*.png *.bmp)");
    qDebug()<<path;
    if(path=="")
        return;

    HTuple h01=HTuple(path.toLatin1().data());
    // Local iconic variables
    HObject  ho_Image, ho_Region, ho_ConnectedRegions;
    HObject  ho_SelectedConnectedRegions, ho_ImageReduced, ho_DerivGaussImage;
    HObject  ho_DerivGaussRegion, ho_DerivGaussConnectedRegions;
    HObject  ho_SelectedDerivGaussConnectedRegions, ho_RegionFillUp;
    HObject  ho_RegionDifference, ho_ResultConnectedRegions;
    HObject  ho_DefectResult;

    // Local control variables
    HTuple  hv_ImageFiles, hv_Index;

    //关闭程序计数器,图形变量,窗口图形更新
    //  dev_update_off();


    //Image Acquisition 01: Code generated by Image Acquisition 01
    hv_ImageFiles = HTuple();
    hv_ImageFiles[0] = "1.bmp";

    HTuple end_val8 = (hv_ImageFiles.TupleLength())-1;
    HTuple step_val8 = 1;
    for (hv_Index=0; hv_Index.Continue(end_val8, step_val8); hv_Index += step_val8)
    {
        qDebug()<<"hhhhh  001";
        //读取一张图像
        //ReadImage(&ho_Image, HTuple(hv_ImageFiles[hv_Index]));
        ReadImage(&ho_Image, h01);
        qDebug()<<"hhhhh  002";
        //分割出环形区域
        Threshold(ho_Image, &ho_Region, 100, 255);
        qDebug()<<"hhhhh  003";
        //对区域进行连通处理
        Connection(ho_Region, &ho_ConnectedRegions);
        qDebug()<<"hhhhh  004";
        //过滤出圆环区域
        SelectShape(ho_ConnectedRegions, &ho_SelectedConnectedRegions, (HTuple("area").Append("circularity")),
                    "and", (HTuple(40000).Append(0.6)), (HTuple(99999).Append(1)));
        qDebug()<<"hhhhh  005";
        //将圆环区域中的图像剪切出来
        ReduceDomain(ho_Image, ho_SelectedConnectedRegions, &ho_ImageReduced);
        qDebug()<<"hhhhh  006";
        //将图像和高斯导数进行卷积运算
        DerivateGauss(ho_ImageReduced, &ho_DerivGaussImage, 1.5, "gradient");
        qDebug()<<"hhhhh  007";
        //分割出图像中的轮廓
        Threshold(ho_DerivGaussImage, &ho_DerivGaussRegion, 9, 50);
        qDebug()<<"hhhhh  008";
        //对轮廓区域进行连通处理
        Connection(ho_DerivGaussRegion, &ho_DerivGaussConnectedRegions);
        qDebug()<<"hhhhh  009";
        //获取的轮廓区域
        SelectShapeStd(ho_DerivGaussConnectedRegions, &ho_SelectedDerivGaussConnectedRegions,
                       "max_area", 70);
        qDebug()<<"hhhhh  010";
        //填充该轮廓区域
        FillUp(ho_SelectedDerivGaussConnectedRegions, &ho_RegionFillUp);
        qDebug()<<"hhhhh  011";
        //求轮廓区域和填充的轮廓区域之间的补集区域
        Difference(ho_RegionFillUp, ho_SelectedDerivGaussConnectedRegions, &ho_RegionDifference
                   );

        //对补集区域进行连通处理
        Connection(ho_RegionDifference, &ho_ResultConnectedRegions);
        qDebug()<<"hhhhh  012";
        //获取缺陷区域
        SelectShape(ho_ResultConnectedRegions, &ho_DefectResult, "area", "and", 50, 999);
        qDebug()<<"hhhhh  013";


        //显示图像
        if (HDevWindowStack::IsOpen())
        {
            DispObj(ho_Image, HDevWindowStack::GetActive());
            qDebug()<<"hhhhh  014";
        }
        DispObj(ho_Image, hv_WindowHandle);

        //显示缺陷区域

        DispObj(ho_DefectResult, hv_WindowHandle);
        qDebug()<<"hhhhh  0 66666";
        // stop(); only in hdevelop

    }

}

运行结果:


下面是Halcon导出QT可以使用的c++脚本

FR:徐海涛(hunkxu)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/733863.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

CompletableFuture 基本用法

一、 CompletableFuture简介 CompletableFuture 是 Java 8 引入的一个功能强大的类&#xff0c;用于异步编程和并发处理。它提供了丰富的 API 来处理异步任务的结果&#xff0c;支持函数式编程风格&#xff0c;并允许通过链式调用组合多个异步操作。 二、CompletableFuture中…

尚品汇-(四)

&#xff08;1&#xff09;商品的基本知识 1.1基本信息—分类 一般情况可以分为两级或者三级。咱们的项目一共分为三级&#xff0c;即一级分类、二级分类、三级分类。 比如&#xff1a;家用电器是一级分类&#xff0c;电视是二级分类&#xff0c;那么超薄电视就是三级分类。…

已解决VirtualMachineError: 虚拟机错误的正确解决方法,亲测有效!!!

已解决VirtualMachineError: 虚拟机错误的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决思路 解决方法 分析错误日志 优化代码 内存泄漏排查 优化递归调用 调整JVM参数 使用监控工具 增加物理内存或升级硬件…

Jmeter5.X性能测试【完整版】

目录 一、Http基础协议和解析 1、浏览器的B/S架构和C/S架构 &#xff08;1&#xff09;CS架构 &#xff08;2&#xff09;BS架构 &#xff08;3&#xff09;URL理解 2、Http超文本传输协议 &#xff08;1&#xff09;含义 # 协议 # json协议 # xml协议 &#xff08;…

mysql分析常用锁、动态监控、及优化思考

这里写自定义目录标题 1.未提交事物&#xff0c;阻塞DDL&#xff0c;继而阻塞所有同表的后续操作,查看未提交事务的进程2.存着正在进行的线程数据。3.根据processlist表中的id杀掉未释放的线程4.查看正在使用的表5.mysql为什么state会有waiting for handler commit6.什么情况导…

简易智能家居系统

文章目录 摘要一、系统设计要求及总体设计方案1.1 设计要求1.2 总体设计方案 二、终端结点的设计及实现2.1单片机最小系统2.2 LED灯的控制与工作状态的显示2.2.1 硬件设计2.2.2 软件设计 2.3 温度的测量与显示2.4 火灾的监测与报警2.5 串口的显示与控制 三、网络传输与控制3.1 …

人工智能在影像组学与放射组学中的最新进展|顶刊速递·24-06-22

小罗碎碎念 本期文献速递的主题——人工智能在影像组学中的最新进展。 小罗一直以来的观点&#xff0c;是把大问题分模块拆解——既然我们想做多模态&#xff0c;那么就先了解单模态的研究套路&#xff0c;再去研究不同模态提取的特征如何融合&#xff0c;搞科研的过程也是管理…

Flutter Android 调试桥 (adb)

客户端&#xff1a;用于发送命令。客户端在开发计算机上运行。您可以通过发出 adb 命令从命令行终端调用客户端。 守护程序adbd&#xff1a;用于在设备上运行命令。守护程序在每个设备上作为后台进程运行。 服务器&#xff1a;用于管理客户端与守护程序之间的通信。服务器在开…

刷代码随想录有感(113):动态规划——爬楼梯plus

题干&#xff1a; 代码&#xff1a; #include<bits/stdc.h> using namespace std;int main(){int n,m;cin>>n>>m;vector<int>dp(n 1, 0);dp[0] 1;for(int j 0; j < n; j){for(int i 1; i < m; i){if(j > i)dp[j] dp[j - i];}}cout<&…

【吊打面试官系列-Mysql面试题】什么是存储过程?用什么来调用?

大家好&#xff0c;我是锋哥。今天分享关于 【什么是存储过程&#xff1f;用什么来调用&#xff1f;】面试题&#xff0c;希望对大家有帮助&#xff1b; 什么是存储过程&#xff1f;用什么来调用&#xff1f; 答&#xff1a;存储过程是一个预编译的 SQL 语句&#xff0c;优点是…

PyScada(三)后端应用

PyScada 的后端应用 使用后端 要使用后端&#xff0c;请在浏览器中打开http://127.0.0.1 &#xff08;将 127.0.0.1 替换为 PyScada 服务器的 IP 或主机名&#xff09;&#xff0c;然后使用安装过程 中定义的管理员帐户登录 &#xff08;TODO 链接到创建超级用户文档&#xf…

【数据分享】《中国法律年鉴》1987-2022

而今天要免费分享的数据就是1987-2022年间出版的《中国法律年鉴》并以多格式提供免费下载。&#xff08;无需分享朋友圈即可获取&#xff09; 数据介绍 自1987年起&#xff0c;《中国法律年鉴》作为一部全面记录中国法律发展进程的重要文献&#xff0c;见证了中国法治建设的每…

G7易流赋能化工物流,实现安全、环保与效率的共赢

近日&#xff0c;中国物流与采购联合会在古都西安举办了备受瞩目的第七届化工物流安全环保发展论坛。以"坚守安全底线&#xff0c;追求绿色发展&#xff0c;智能规划化工物流未来"为主题&#xff0c;该论坛吸引了众多政府部门、行业专家和企业代表的参与。G7易流作为…

unity中使用commandbuffer将自定义画面渲染到主相机上

CommandBuffer 保存渲染命令列表&#xff08;例如设置渲染目标或绘制给定网格&#xff09;。您可以指示 Unity 在内置渲染管线中的各个点安排和执行这些命令&#xff0c;因此&#xff0c;您可以自定义和扩展 Unity 的渲染功能。 这句话意味着你可以通过command buffer让相机渲…

数组和链表的区别是什么?

引言&#xff1a;本文旨在深入探讨数组和链表之间的区别&#xff0c;分析它们在不同情境下的优缺点&#xff0c;并探讨如何根据应用需求选择合适的数据结构。通过深入理解数组和链表的内部工作原理和应用场景&#xff0c;读者将能够更好地应用这些知识解决实际问题&#xff0c;…

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell

web中间件漏洞-Jenkins漏洞-弱口令、反弹shell Jenkins弱口令 默认用户一般为jenkins/jenkins 使用admin/admin123登陆成功 Jenkins反弹shell 格式为 println"命令".execute().text 在/tmp目录中生成shell.sh文件&#xff0c;并向其中写入反弹shell的语句 new…

【金】?Y? python网页前端streamlit

1、如何从 Google Colab Notebook 启动 streamit参考-How to Launch Streamlit App from Google Colab Notebook !streamlit run web.py & npx localtunnel --port 8501 & curl ipv4.icanhazip.com

【Excel经验】字符串处理方法

概览-公式汇总 序号公式功能公式公式示例公式说明1把多列内容拼接在一起&#xff0c;作为新的一列的内容CONCATENATE (text1,text2,…)CONCATENATE(A2,“#”,B2,“”,C2)用于根据多个列的内容拼成我们指定格式的内容&#xff0c;拼接的内容通常来源于原始数据&#xff0c;同时…

keep-alive实现页面缓存

<!--router-view 实现页面缓存--> <router-view v-slot"{Component}"><keep-alive :max"8"><component :is"Component"></component></keep-alive> </router-view>

人工智能导论笔记

有关知识表示和推理的零碎知识点 人工智能导论复习题和概念-CSDN博客 机器学习篇 机器学习分类&#xff08;根据样本数据是否带有标签&#xff09;&#xff1a;监督的机器学习、无监督的机器学习、半监督学习。 监督学习又称为“有教师学习”。在监督学习中&#xff0c;模型…