加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]Qt+Halcon  图像显示和简单处理

(2015-10-12 20:39:52)
标签:

转载

分类: halcon_qt
       最近开始学习Halcon,需要结合Qt来进行学习,网络上有一些Halcon/MFC的编程教程,关于Qt+Halcon的编程教程还比较少。
       在学习的过程中,网络上的一些相关方面的博客对自己帮助很大,所以打算一边学习,一边写下自己的学习心得,希望别人也能从自己的笔记中得到一些帮助。
       

下面开始进入正题

        本文的开发环境为vs2010+Qt4.8.5+Halcon11.0 ,关于开发环境的配置,网络上有许多教程,在此就不再重复。
        首先放出本次学习的用图:
http://s15/mw690/005AFwmPzy6Kgy9XlFQee&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />

                           

       上图为Halcon示例中带的图片,本次学习为将上图中的环形针从图像中提取出来。这里图像的处理不是关键,本例主要是为了弄懂入门Qt配合Halcon最基本的问题:Halcon导出的c++代码嵌入到Qt当中来实现程序功能。

下面先看一张程序的运行图:
                     
http://s4/mw690/002rsDsHzy6KgtBP3ij93&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />


下面来说一下此程序的详细步骤和代码:

一、Halcon代码如下:
            http://s15/mw690/005AFwmPzy6KguUHk86ae&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />
     
二、从Halcon中导出的c++代码如下:

///////////////////////////////////////////////////////////////////////////////
//  File generated by HDevelop for HALCON/C++ Version 11.0
///////////////////////////////////////////////////////////////////////////////
#ifndef __APPLE__
#  include "HalconCpp.h"
#  else
#  ifndef HC_LARGE_IMAGES
#  include
#  else
#  include
#  endif
#  endif

using namespace HalconCpp;

#ifndef NO_EXPORT_MAIN
// Main procedure 
void action()
{

  // Local iconic variables 
  HObject  ho_Image, ho_Region, ho_ConnectedRegions;
  HObject  ho_SelectedRegions;


  // Local control variables 
  HTuple  hv_Width, hv_Height, hv_WindowID;

  ReadImage(&ho_Image, "C:/Users/Administrator/Desktop/clip.png");
  GetImageSize(ho_Image, &hv_Width, &hv_Height);
  SetWindowAttr("background_color","black");
  OpenWindow(0,0,hv_Width/2,hv_Height/2,0,"","",&hv_WindowID);
  HDevWindowStack::Push(hv_WindowID);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Image, HDevWindowStack::GetActive());
  Threshold(ho_Image, &ho_Region, 0, 128);
  Connection(ho_Region, &ho_ConnectedRegions);
  SelectShape(ho_ConnectedRegions, &ho_SelectedRegions, "area", "and", 5000, 9000);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_SelectedRegions, HDevWindowStack::GetActive());
}


#ifndef NO_EXPORT_APP_MAIN
int main(int argc, char *argv[])
{
  // Default settings used in HDevelop (can be omitted) 
  SetSystem("width", 512);
  SetSystem("height", 512);
  action();
  return 0;
}
#endif
#endif

三、将代码加入到Qt中

首先打开vs2010新建Qt  Dialog工程
                http://s5/bmiddle/005AFwmPzy6Kgw52qs474&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />


Qt Designer中添加两个按钮:
http://s15/bmiddle/005AFwmPzy6Kgwg1X5Q4e&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />

首先将void action中的变量声明部分放在qt头文件中的public下:
http://s15/mw690/005AFwmPzy6KgwsbquW4e&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />
然后将读取图像部分的代码复制到cpp文件中的读取图像按钮的槽函数中:
http://s3/mw690/005AFwmPzy6KgwEKlJU82&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />
此处需要注意,需要添加红线部分代码,如果删去红线部分的代码,则Halcon的图像显示窗口会独立于Qt的Dialog窗口,因为OpenWindow函数的第五个参数为指定窗口的父窗口,默认为0,需要获取Dialog的窗口句柄然后转换成Hlong类型。此处和MFC的代码有所区别。

最后将图像处理部分的代码复制到cpp文件中图像处理按钮的槽函数中:

http://s15/mw690/005AFwmPzy6Kgx1b6I65e&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />四、运行结果:
http://s6/mw690/005AFwmPzy6KgxBgpil85&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />
                                                                           处理前

http://s14/bmiddle/005AFwmPzy6Kgxud5G59d&690 图像显示和简单处理" TITLE="[转载]Qt+Halcon  图像显示和简单处理" />
                                                                            
                                                                                 处理后
                      


       


                                        










0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有