Halcon 学习笔记九:MFC+halcon联合

简介: Halcon 学习笔记九:MFC+halcon联合

一、halcon导出cpp文件

首先在halcon中,读取图片,获得图片宽高,打开窗口,显示图片(如果不调用,在c++中无法显示)

read_image (Image, 'C:/Users/xuheding/Desktop/图片/5.png')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width/2, Height/2, 'black', WindowHandle)
dev_display (Image)

然后导出

可以看到a.cpp文件,就是我们刚才导出的文件

action里面就是我们主要的内容

二、新建工程

打开VS2019,选择创建新项目,MFC应用程序,应用程序类型,选择基于对话框

1.然后修改窗体的名字,选择窗体,右击,属性,找到描述文字,修改为“图像采集显示”

2.托一个picture control,用来显示图片

3.托一个Button,描述文字修改为采集显示

三、配置

注意64位和32位的区别,不然是没法配置成功的。

1.首先配置头文件 .h

点击项目-》属性-》c/c++ -》常规 -》附加包含目录

将这两个目录进行添加

2. 配置链接器库目录 lib文件

点击链接器->常规->附加库目录

这一步仅仅是添加了库的目录,现在把想要用的lib文件添加进去

在链接器->输入->附加依赖项中 添加要使用的库文件

3.配置动态链接库 dll

进入C:\Program Files\MVTec\HALCON-18.11-Progress\bin\x64-win64

把所有的dll拷贝到当前工程的目录下,当然我们不是所有的都用到,只用到部分dll。

还有一种方法是把C:\Program Files\MVTec\HALCON-18.11-Progress\bin\x64-win64加入到环境变量中去

四、测试是否配置成功

在dlg结尾的文件中,添加头文件和命名空间

然后可以测试下能不能用了

添加全局变量

HObject  ho_Image;
HTuple  hv_Width, hv_Height, hv_WindowHandle;

在按钮点击事件下添加

(注意ReadImage的路径下不能有中文)

void CMFCApplication1Dlg::OnBnClickedButton1()
{
  // TODO: 在此添加控件通知处理程序代码
  ReadImage(&ho_Image, //'C:/Users/xuheding/Desktop/image/5.png'
    "C:/Users/xuheding/Desktop/image/5.png");
}

点击 生成->重新生成解决方案,若通过即可

五、添加程序

然后把剩下的拷贝过去

在单击显示按钮下面

void CMFCApplication1Dlg::OnBnClickedButton1()
{
  // TODO: 在此添加控件通知处理程序代码
  ReadImage(&ho_Image, "C:/Users/xuheding/Desktop/image/5.png");
  GetImageSize(ho_Image, &hv_Width, &hv_Height);
  SetWindowAttr("background_color", "black");
  OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, 0, "visible", "", &hv_WindowHandle);
  HDevWindowStack::Push(hv_WindowHandle);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Image, HDevWindowStack::GetActive());
}

会发现图像显示在想要的窗口外边

因此要添加窗口的句柄上去

点击Picture Control的属性,更换ID

添加句柄

//创建PictureControl的句柄
  HWND hwndl;
  hwndl = GetDlgItem(IDC_PIC)->m_hWnd;
  LONG lWWindowID = (LONG)hwndl;
  //将句柄0替换成想要的窗体的句柄
  OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, lWWindowID, "visible", "", &hv_WindowHandle);
  //OpenWindow(0, 0, hv_Width / 2, hv_Height / 2, 0, "visible", "", &hv_WindowHandle);

由于图像比较大,而窗口比较小,图像没法显示全

那就只能通过限制打开的窗口大小,为图片控件的大小,那样显示的图片就会占据整个控件

void CMFCApplication1Dlg::OnBnClickedButton1()
{
  // TODO: 在此添加控件通知处理程序代码
  ReadImage(&ho_Image, "C:/Users/xuheding/Desktop/image/5.png");
  GetImageSize(ho_Image, &hv_Width, &hv_Height);
  SetWindowAttr("background_color", "black");
  //创建PictureControl的句柄
  HWND hwndl;
  hwndl = GetDlgItem(IDC_PIC)->m_hWnd;
  LONG lWWindowID = (LONG)hwndl;
  //获取PictureControl窗口大小
  CRect rect;
  GetDlgItem(IDC_PIC)->GetWindowRect(&rect);
  m_w[0] = rect.Width();//m_w为HTuple类型,只装一个值,所以取索引0
  m_h[0] = rect.Height();
  //将句柄0替换成想要的窗体的句柄
  OpenWindow(0, 0, m_w, m_h, lWWindowID, "visible", "", &hv_WindowHandle);
  //OpenWindow(0, 0, hv_Width/2, hv_Height/2, 0, "visible", "", &hv_WindowHandle);
  HDevWindowStack::Push(hv_WindowHandle);
  if (HDevWindowStack::IsOpen())
    DispObj(ho_Image, HDevWindowStack::GetActive());
}

如果今后的例子中出现了图像只显示了部分


相关文章
|
7月前
|
算法 计算机视觉 Python
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
openCV 3计算机视觉 Python语言实现 笔记 第三章 使用OpenCV 3处理图像
|
8月前
|
C# C++
halcon联合c#、WPF学习笔记一(WPF配置halcon)
halcon联合c#、WPF学习笔记一(WPF配置halcon)
423 1
|
8月前
|
C#
halcon联合c#、WPF学习笔记二(简单案例)
halcon联合c#、WPF学习笔记二(简单案例)
468 0
|
8月前
|
计算机视觉
Halcon 学习笔记八:颜色识别
Halcon 学习笔记八:颜色识别
587 0
|
8月前
|
计算机视觉
OpenCV(十九):模板匹配
OpenCV(十九):模板匹配
67 0
|
8月前
|
计算机视觉
[Qt&MFC] 各种方式的图像读取(OpenCv、Halcon)
[Qt&MFC] 各种方式的图像读取(OpenCv、Halcon)
143 0
|
测试技术 C#
C# halcon SubImage的使用
C# halcon SubImage的使用
|
计算机视觉 Python
OpenCV学习笔记(五)【图像大小重定义】
OpenCV学习笔记(五)【图像大小重定义】
OpenCV学习笔记(五)【图像大小重定义】