qt+halcon实战

news2024/11/28 18:52:53

注意建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)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一个漂亮的网站收藏函数

<!DOCTYPE html> <html lang="zh-CN"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>网站收藏</title><style>body …

会自动清除的文件——tempfile

原文链接&#xff1a;http://www.juzicode.com/python-tutorial-tempfile/ 在某些不需要持久保存文件的场景下&#xff0c;可以用tempfile模块生成临时文件或者文件夹&#xff0c;这些临时文件或者文件夹在使用完之后就会自动删除。 NamedTemporaryFile用来创建临时文件&…

Gradle学习-1

1、APK构建流程 2、Gradle的安装 &#xff08;1&#xff09;安装Java JDK JAVA JDK 下载地址下载安装后需要配置环境变量gradle是运行在Java虚拟机上的&#xff0c;所以需要配置Java JDK &#xff08;2&#xff09;安装 Gradle Gradle下载官网下载安装后需要配置环境变量 …

跨行业数据资产共享与协同:构建一体化数据共享平台,解锁数据资产潜力,促进多行业数据流通与深度应用,共创数字化转型新篇章,引领行业发展新趋势,开启智慧互联新纪元

一、引言 随着信息技术的飞速发展&#xff0c;数据已成为推动社会进步和经济发展的关键要素。然而&#xff0c;在传统行业领域&#xff0c;数据往往被限制在各自的“孤岛”中&#xff0c;难以实现跨行业的流通与共享。这不仅限制了数据的价值发挥&#xff0c;也阻碍了行业的创…

show/hide信号演示

代码&#xff1a; #include <gtk-2.0/gtk/gtk.h> #include <gtk-2.0/gdk/gdkkeysyms.h> #include <glib-2.0/glib.h> #include <stdio.h>gint delete_event(GtkWidget *window, GdkEvent *event, gpointer data) {gtk_widget_hide(window);return TRU…

Vue78-缓存路由组件

一、需求 路由切走的时候&#xff0c;组件会被销毁&#xff0c;路由切回来&#xff0c;组件被挂载&#xff01; 需要&#xff1a;路由切走的时候&#xff0c;组件不会被销毁。 二、代码实现 若是不加include属性&#xff0c;则在<router-view>里面展示的路由&#xff0c…

【一】【算法】经典树状数组和并查集,详细解析,初步认识,【模板】树状数组 1,树状数组并查集

【模板】树状数组 1 题目描述 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某一个数加上 x x x 求出某区间每一个数的和 输入格式 第一行包含两个正整数 n , m n,m n,m&#xff0c;分别表示该数列数字的个数和操作的总个数。 第二…

webpack安装sass

package.json文件 {"devDependencies": {"sass-loader": "^7.2.0","sass": "^1.22.10","fibers": "^4.0.1"} }这个不用webpack.config.js module.exports {module: {rules: [{test: /\.s[ac]ss$/i,u…

日元预计明年开始上涨

被称为“日元先生”的前大藏省&#xff08;现财务省&#xff09;财务官榊原英资预测&#xff0c;美元兑日元汇率将在今年底或2025年初逐步升至130。他认为&#xff0c;通缩时代已经过去&#xff0c;通货膨胀即将来临。 《日本经济新闻》6月5日报道&#xff0c;日本财务省于5月3…

AI大眼萌探索 AI 新世界:Ollama 使用指南【1】

在人工智能的浪潮中&#xff0c;Ollama 的出现无疑为 Windows 用户带来了一场革命。这款工具平台以其开创性的功能&#xff0c;简化了 AI 模型的开发与应用&#xff0c;让每一位爱好者都能轻松驾驭 AI 的强大力量。大家好&#xff0c;我是AI大眼萌&#xff0c;今天我们将带大家…

全志 Android 11:实现响应全局按键

一、篇头 最近实现热键想功能&#xff0c;简单总结了下全志平台Android 11 的响应全局热键的方法。 二、需求 实现全局热键&#xff0c;响应F-、AF、F三个按键&#xff0c;AF只用于启动调焦界面&#xff0c;F-和F除了可以启动调焦界面外&#xff0c;还用于调整镜头的焦距&…

RN组件库 - Button 组件

从零构建 React Native 组件库&#xff0c;作为一个前端er~谁不想拥有一个自己的组件库呢 1、定义 Button 基本类型 type.ts import type {StyleProp, TextStyle, ViewProps} from react-native; import type {TouchableOpacityProps} from ../TouchableOpacity/type; import…

【活动】TSRC反爬虫专项正式启动!

活动时间 即日起 ~ 2024年7月5日 18:00 测试范围&#xff1a;微信公众号、腾讯新闻等 测试域名&#xff1a;mp.weixin.qq.com 微信公众号相关接口 1. 微信公众号文章列表 2. 历史文章 3. 文章详细内容 注&#xff1a;详情报名后公布。反爬虫专项将不定期上线新业务&#xf…

Java比较运算符

关系运算符和比较运算符适用于条件判断类型。 相当于布尔值&#xff0c;只有True和False两个 符号 说明ab,判断a的值是否等于b的值&#xff0c;条件成立为true,不成立为false ! a!b,判断a和b的值是否不相等&#xff0c;条件成立为true,不成立为false > …

【字符串 状态机动态规划】1320. 二指输入的的最小距离

本文涉及知识点 动态规划汇总 字符串 状态机动态规划 LeetCode1320. 二指输入的的最小距离 二指输入法定制键盘在 X-Y 平面上的布局如上图所示&#xff0c;其中每个大写英文字母都位于某个坐标处。 例如字母 A 位于坐标 (0,0)&#xff0c;字母 B 位于坐标 (0,1)&#xff0…

java之url任意跳转漏洞

1 漏洞介绍 URLRedirect url重定向漏洞也称url任意跳转漏洞&#xff0c;网站信任了用户的输入导致恶意攻击&#xff0c;url重定向主要用来钓鱼&#xff0c;比如url跳转中最常见的跳转在登陆口&#xff0c;支付口&#xff0c;也就是一旦登陆将会跳转任意自己构造的网站&#xf…

操作系统实验一:实验环境搭建与系统调用(在VMWare中安装xv6)

目录 一、实验目的 二、具体任务安排 1.实验环境搭建 2.系统调用 近来有空闲&#xff0c;把前几个学期做的实验上传上来。如有错误的地方欢迎大佬批评指正&#xff0c;有更好的方法也期待您的分享~ 一、实验目的 在Windows中安装VMWare虚拟机、在虚拟机中编译安装Qemu、最终…

【软件工程】【22.04】p1

关键字&#xff1a; 软件需求规约基本性质、数据字典构成、内聚程度最高功能内聚、公有属性、RUP实体类、评审、测试序列、软件确认过程、CMMI能力等级 软件需求分类、DFD数据流图组成&#xff08;实体&#xff09;、经典详细设计、数据耦合、关联多重性、状态图、黑盒测试、…

常见的Wi-Fi蓝牙模组

在嵌入式领域&#xff0c;常见的Wi-Fi蓝牙模组确实包括多个知名品牌&#xff0c;如乐鑫、安信可和移远等&#xff0c;以前可能你听的最多的是ESP8266&#xff0c;不过今天讨论的是Wi-Fi蓝牙模组&#xff0c;而8266本身并不内置蓝牙功能&#xff0c;不在介绍范围。而拿到模块之后…

4、MFC:菜单栏、工具栏与状态栏

菜单栏、工具栏与状态栏 1、菜单栏1.1 简介1.2 创建属性设置菜单消息成员函数 1.3 实例 2、工具栏2.1 简介工具栏属性2.2 创建消息CToolBar类的主要成员函数 2.3 实例 3、状态栏3.1 简介3.2 创建CStatusBar类状态栏创建 3.3 实例 1、菜单栏 1.1 简介 菜单在界面设计中是经常使…