Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码)

这篇具有很好参考价值的文章主要介绍了Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

在工业领域中,缺陷检测、目标计数等功能的应用,其过程基本都是见招拆招,没有一个具体的标准,把输入输出接口标准化,过程用脚本引擎代替就可以实现功能的标准模块。

一、Qt + OpenCV + Halcon

输入输出接口采用Qt + OpenCV来实现,OpenCV需要将采集到的图片转为Halcon的图像接口用于脚本检测,脚本输出的接口需要转换为Qt和OpenCV,用于绘制缺陷或目标的轮廓和标记。

Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码),Halcon脚本引擎,qt,opencv,人工智能,视觉检测

OpenCV的 Mat 转 Halcon 的 HObject:

HObject HMatToHObject(Mat image)
{
    HObject ho_obj=HObject();
    if(image.empty())
        return ho_obj;
    if(3==image.channels())
    {
        int w=image.cols;
        int h=image.rows;
        if(image.depth()==CV_8U)
        {
            vector<cv::Mat> ichannels;
            cv::Mat imagB;
            cv::Mat imagG;
            cv::Mat imagR;
            cv::split(image, ichannels);
            imagB=ichannels.at(0);
            imagG=ichannels.at(1);
            imagR=ichannels.at(2);
            uchar* dataRed=new uchar[w*h];
            uchar* dataGreen=new uchar[w*h];
            uchar* dataBlue=new uchar[w*h];
            for(int i=0;i<h;i++)
            {
                memcpy(dataRed + w*i, imagR.ptr() + imagR.step*i, w);
                memcpy(dataGreen + w*i, imagG.ptr() + imagG.step*i, w);
                memcpy(dataBlue + w*i, imagB.ptr() + imagB.step*i, w);
            }
            GenImage3(&ho_obj, "byte", w, h, (Hlong)(dataRed), (Hlong)(dataGreen), (Hlong)(dataBlue));
            delete[] dataRed;
            delete[] dataGreen;
            delete[] dataBlue;
        }
    }
    else if(1==image.channels())
    {
        int w=image.cols;
        int h=image.rows;
        if(image.depth()==CV_8U)
        {
            uchar* dataGray=new uchar[w*h];
            for(int i=0;i<h;i++)
                memcpy(dataGray + w*i, image.ptr() + image.step*i, w);
            GenImage1(&ho_obj, "byte", w, h, (Hlong)(dataGray));
            delete[] dataGray;
        }
    }
    return ho_obj;
}


输入-脚本-输出相关代码:

 try
    {
        HObject ho_ImageIn, ho_RegionIn, ho_RegionOn, ho_Chamber;
        HTuple hv_Objs, hv_Phi;
        HTuple hv_Rows, hv_Cols, hv_Area, hv_Row, hv_Column;
        //图像Mat转换
        ho_ImageIn=HMatToHObject(param->image);
        GenEmptyObj(&ho_RegionIn);
        GenEmptyObj(&ho_RegionOn);
        if(isOK)
        {
            //引擎
            m_HdevHpdc.SetInputIconicParamObject("ImageIn", ho_ImageIn);
            m_HdevHpdc.SetInputIconicParamObject("RegionIn", ho_RegionIn);
            //执行Haclon程序
            m_HdevHpdc.Execute();
            //输出结果
            ho_RegionOn=m_HdevHpdc.GetOutputIconicParamObject("RegionOn");
            try
            {
                CountObj(ho_RegionOn, &hv_Objs);
                hv_Objs = hv_Objs.Length()!=1 ? (int)0 : hv_Objs;
                for(int i=1;i<=hv_Objs.I();i++)
                {
                    //缺陷坐标、面积
                    SelectObj(ho_RegionOn, &ho_Chamber, i);
                    AreaCenter(ho_Chamber, &hv_Area, &hv_Row, &hv_Column);
                    OrientationRegion(ho_Chamber, &hv_Phi);
                    OutPatchResult result;
                    result.col=(float)hv_Column.D();
                    result.row=(float)hv_Row.D();
                    result.angle=(float)hv_Phi.D()*180/QM_PI;
                    result.area=(float)hv_Area.D();
                    GetRegionContour(ho_Chamber, &hv_Rows, &hv_Cols);
                    for(int i=0;i<hv_Cols.Length();i++)
                    {
                        result.contour.push_back((float)hv_Cols[i].D());
                        result.contour.push_back((float)hv_Rows[i].D());
                    }
                    importApi->results.push_back(result);
                    //记录总面积和数量
                    Area += hv_Area.D();
                    Count++;
                }
                //加载成功
                inter->hdevOk=true;
                inter->hdevError=QString("RegionNum: %1; Area: %2; Time: %3ms")
                                          .arg(Count)
                                          .arg(Area)
                                          .arg((double)clock()-Times);
            }
            catch(HOperatorException &hv_Except)
            {
                isOK=false;
                inter->hdevOk=false;
                inter->hdevError=QString("[error: EngineOperator=%1;]").arg(hv_Except.ErrorMessage().Text());
            }
        }
    }
    catch(HDevEngineException &hv_Except)
    {
        isOK=false;
        inter->hdevOk=false;
        inter->hdevError=QString("[error: EngineDetect=%1;]").arg(hv_Except.Message());
    }

Halcon加载脚本文件相关代码:

bool TB_HaclonEngin::loaded()
{
    bool isOK=true;
    HaclonEnginImport* importApi=&api.input;
    try
    {
        //初始化
        this->released();
        QFile file(importApi->inter.hdevPath);
        isOK = file.exists() ? isOK : false;
        if(isOK)
        {
            //加载
            m_HdevProgram.LoadProgram(importApi->inter.hdevPath.toLocal8Bit().data());
            //变量名
            m_HdevParamNames=m_HdevProgram.GetCtrlVarNames();
            //对象名
            m_HdevIconNames=m_HdevProgram.GetIconicVarNames();
            //函数名
            m_HdevFunNames=m_HdevProgram.GetLocalProcedureNames();
            //第一个子函数变量(runApi)
            HTuple funName=m_HdevFunNames.TupleSelect(HTuple(0));
            //进程
            m_HdevHpd=HDevProcedure(m_HdevProgram, funName.ToSArr()->Text());
            m_HdevHpdc=m_HdevHpd.CreateCall();
            importApi->inter.hdevOk=true;
            importApi->inter.hdevError=QString::fromLocal8Bit("Load: %1").arg(importApi->inter.hdevPath);
        }
    }
    catch(HDevEngineException &hv_Except)
    {
        isOK=false;
        importApi->inter.hdevOk=false;
        importApi->inter.hdevError=QString("[error: EngineLoad=%1;]").arg(hv_Except.Message());
    }
    return isOK;
}

二、QScintilla扩展包

QScintilla工具可实现Halcon脚本的颜色编译,包括关键字的提示,和语法错误信息提示等等。

关键字扩展文档:

Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码),Halcon脚本引擎,qt,opencv,人工智能,视觉检测

关键字颜色、错误提示:

Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码),Halcon脚本引擎,qt,opencv,人工智能,视觉检测
Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码),Halcon脚本引擎,qt,opencv,人工智能,视觉检测


总结

软件的全套源码可参考文章来源地址https://www.toymoban.com/news/detail-753486.html

https://download.csdn.net/download/dede28/88530232

到了这里,关于Qt + OpenCV + Halcon + QScintilla 实现Halcon的脚本引擎功能 (源码)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt Modbus通信】QModbus实现modbus的主机功能 源码分享

    modbus在上下位机数据交互时被广泛使用,因此写了这篇笔记和大家一起学习。 【Qt Modbus通信】libmodbus实现modbus的主机功能/从机功能 源码分享 之前使用libmodbus实现了modbus的主从功能,但发现主机查询从机的从机ID不能大于200+,因此参考QT5的modbusDEMO重新写了一份基于QModbus实现

    2024年02月02日
    浏览(53)
  • opencv c++ canny 实现 以及与halcon canny的对比

    1、图像必须是单通道的,也就是说必须是灰度图像 2、图像进行高斯滤波,去掉噪点  3、sobel 算子过程的实现,计算x y方向 、梯度(用不到,但是可以看看xy 两个组合起来的结果) 以及梯度方向(很重要) 4、局部非极大值抑制 5、双阈值连接处理 具体可以分为上面的5个步

    2024年02月06日
    浏览(35)
  • 基于C#调用halcon实现模板匹配【附部分源码】

    本文主要实现基于C#实现视觉定位的基础框架,与前面的python版、MFC版、Qt版一样,可供不同的开发者进行学习使用。 本文也是包括多模板算法匹配:基于形状、基于灰度、基于相关性、基于可变比例等。 编程环境:dotnet4.7 halcon20.05 IDE: VisualStudio 2022 本次项目的效果视频:

    2024年02月06日
    浏览(79)
  • QT+opencv源码编译

    时间记录:2024/1/20 QT5.12.7+cmake3.22.0+opencv4.5.4 (1)下载opencv源码,然后安装,opencv的安装即对源码的解压过程,解压后的文件目录如下 (2)opencv安装解压后的目录介绍: build文件夹vs编译源码后的文件,QT项目使用vs套件编译的可以直接使用本文件夹下的文件 sources文件夹ope

    2024年01月21日
    浏览(35)
  • Java源码规则引擎:jvs-rules 8月新增功能介绍

    JVS-rules是JAVA语言下开发的规则引擎,是jvs企业级数字化解决方案中的重要配置化工具,核心解决业务判断的配置化,常见的使用场景:金融信贷风控判断、商品优惠折扣计算、对员工考核评分等各种变化的规则判断情景。 8月是收获的季节,jvs-rules在这个季节到来之时做了大

    2024年02月14日
    浏览(44)
  • YOLOV5 自动刷图脚本实战(六)之OpenCV+CMake+MinGW-64 Qt5编译

    目录  一、OpenCV下载 1、官网地址: 2、安装解压OpenCV 二、OpenCV-Contrib下载 1、下载

    2024年02月03日
    浏览(42)
  • halcon脚本-深度学习【目标检测】

    本文讲解使用halcon的目标检测是使用步骤,标注工具不使用halcon提供的标注工具,而是使用各个深度学习框架都使用的labelImg工具,然后使用hde脚本以及python脚本转化为标准的halcon训练及文件 本文涉及数据标注、数据转化、训练、评估、预测几个模块。   首先我是用的是

    2024年02月10日
    浏览(44)
  • halcon脚本-找直线并拟合

    本文主要是实现halcon脚本找直线,并根据两条拟合直线计算交点坐标,并得出其位置角度。 本文主要针对一下图片进行检测: 图1: 图2: 从图上标明可知,本次检测就是我画的蓝色的线条部分 根据现场照片来说,本次的实验的工件存在各种角度,不单单是摆着那么正的,因

    2024年02月04日
    浏览(30)
  • 使用 Qt6-mingw 编译 OpenCV 源码

    Qt 6.6.0 win11 x86_64 网址: https://cmake.org/download/ 选择对应的版本下载 将 cmake.exe 所在的 bin 目录添加到环境变量中 网址: https://opencv.org/releases/ 选择对应的版本下载 Source资源包 解压 “opencv-4.9.0.zip”, 将其解压的 “opencv-4.9.0” 存放到指定路径 “Path” (例如在我的电脑上 “Path”

    2024年01月24日
    浏览(45)
  • 基于Python+OpenCV的图像搜索引擎(CBIR+深度学习+机器视觉)含全部工程源码及图片数据库下载资源

    本项目旨在开发一套完整高效的图像搜索引擎,为用户提供更加便捷的图片搜索体验。为了实现这一目标,我们采用了 CBIR(Content-based image retrieval)技术,这是目前主流的图像搜索方法之一。CBIR 技术基于图像内容的相似性来检索相似的图像,相比于传统的图像搜索方法,

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包