解决问题1:可以从桌面显示到FORM MFC/HALCON混合编程系列一_打开图像_简单处理_

没法爱上新浪

 转载:http://blog.sina.com.cn/s/blog_812e326f010110og.html

从图1到图2

图1(在桌面显示了)

open_window(0,0, Width/2, Height/2,0,"visible","",&WindowHandle);

更改为:

Hlong MainWndID =(Hlong) m_hWnd;

open_window(0,0, Width/2, Height/2,MainWndID,"visible","",&WindowHandle);

图2

1.说明

在对话框中打开一幅图像,然后处理此图像并显示最终结果。使用的Hdevelop的代码如下:

从Hdevelop导出的C++代码如下:

///////////////////////////////////////////////////////////////////////////////

// File generated by HDevelop for HALCON/C++ Version 8.0

///////////////////////////////////////////////////////////////////////////////

#include"HalconCpp.h"

#ifndefNO_EXPORT_MAIN

// Main procedure

voidaction()

{

usingnamespaceHalcon;

// Local iconic variables

Hobject Image, Region, ConnectedRegions, SelectedRegions;

Hobject RegionClosing, RegionDifference, ConnectedRegions1;

Hobject SelectedRegions1;

// Local control variables

HTuple AcqHandle, Pointer, Type, Width, Height;

HTuple WindowHandle;

//dev_close_window ()

//dev_update_window (‘off‘)

//close_all_framegrabbers ()


open_framegrabber("File", 1, 1, 0, 0, 0, 0, "default", -1, "default", -1, "default",

"", "default", -1, -1, &AcqHandle);

grab_image(&Image, AcqHandle);

get_image_pointer1(Image, &Pointer, &Type, &Width, &Height);

set_window_attr("background_color","black");

open_window(0,140,Width/2,Height/2,0,"","",&WindowHandle);

disp_obj(Image, WindowHandle);


set_color(WindowHandle,"red");

threshold(Image, &Region, 0, 50);

connection(Region, &ConnectedRegions);

select_shape(ConnectedRegions, &SelectedRegions, "rect2_len1", "and", 500, 550);

closing_rectangle1(SelectedRegions, &RegionClosing, 80, 80);

difference(RegionClosing, SelectedRegions, &RegionDifference);

connection(RegionDifference, &ConnectedRegions1);

select_shape(ConnectedRegions1, &SelectedRegions1, "area", "and", 500, 99999);

clear_window(WindowHandle);

disp_obj(Image, WindowHandle);

disp_obj(SelectedRegions1, WindowHandle);

//grab_image (Image, AcqHandle)

}

#ifndefNO_EXPORT_APP_MAIN

intmain(intargc, char*argv[])

{

usingnamespaceHalcon;

// Default settings used in HDevelop (can be omitted)

set_system("do_low_error","false");

action();

return0;

}

#endif

#endif

我们当前要做的就是将这些导出的C++代码嵌入到MFC工程中。

2.新建MFC对话框工程。点击VS2005 菜单file/new/project,弹出如下对话框:

在Visual C++下选择MFC,然后选择右边的MFC Application,输入工程的名字HalconMFC,点击确定将弹出应用程序向导。

在Application Type中选中Dialog Based。Resource language根据你自己爱好选择,我这里选择中文(中国)。点击下一步。

到User Interface Features,勾选Minimize box 和 Maximize Box,那么生成的对话框就可以最小化和最大化。点击next,后面几个选择默认的就好,直到finish。这样一个新的对话框工程就OK了。

3.设置工程

为了能够使用halcon提供的图像处理算子,1.需要设置工程的属性。点击project/properties/Configuration Properties/Linker/Input,在Additional Dependencies 中添加 halconcpp.lib ,如下图所示:

4.添加文件包含

在用到图像处理算子的文件中添加此句:#include"halconcpp.h"。本例子中halcon的算子只在halconMFCDlg中用到,因此只需要在halconMFCDlg.h和halconMFCDlg.cpp中添加此句。在halconMFCDlg.h,#include"halconcpp.h"后添加usingnamespaceHalcon;

5.修改对话框,添加两个按钮。并增加响应函数。设计的界面如下:

去掉原来的两个按钮,并且添加另外连个按钮:读取图像(IDC_ReadImage)和图像处理(IDC_ImageProcess)

双击两个按钮,应用程序框架自动添加消息响应函数,当然我们需要修改此消息响应函数。

6.根据导出的C++代码修改响应函数及其他设置。打开生成的C++代码,

6.1 将action()中的变量部分复制到class CHalconMFCDlg: publicCDialog中作为该类的公有成员变量。即如下所示的代码段:

// Local iconic variables

Hobject Image, Region, ConnectedRegions, SelectedRegions;

Hobject RegionClosing, RegionDifference, ConnectedRegions1;

Hobject SelectedRegions1;

// Local control variables

HTuple AcqHandle, Pointer, Type, Width, Height;

HTuple WindowHandle;

6.2 将action()中的打开图像部分复制到voidCHalconMFCDlg::OnBnClickedReadimage()中。代码如下所示:

open_framegrabber("File", 1, 1, 0, 0, 0, 0, "default", -1, "default", -1, "default",

"", "default", -1, -1, &AcqHandle);

grab_image(&Image, AcqHandle);

get_image_pointer1(Image, &Pointer, &Type, &Width, &Height);

set_window_attr("background_color","black");

open_window(0,140,Width/2,Height/2,0,"","",&WindowHandle);

disp_obj(Image, WindowHandle);

6.3 将action()中的图像处理部分复制到void CHalconMFCDlg::OnBnClickedImageprocess()中。 代码如下所示:

set_color(WindowHandle,"red");

threshold(Image, &Region, 0, 50);

connection(Region, &ConnectedRegions);

select_shape(ConnectedRegions, &SelectedRegions, "rect2_len1", "and", 500, 550);

closing_rectangle1(SelectedRegions, &RegionClosing, 80, 80);

difference(RegionClosing, SelectedRegions, &RegionDifference);

connection(RegionDifference, &ConnectedRegions1);

select_shape(ConnectedRegions1, &SelectedRegions1, "area", "and", 500, 99999);

clear_window(WindowHandle);

disp_obj(Image, WindowHandle);

disp_obj(SelectedRegions1, WindowHandle);

7.编译运行。完成以上步骤以后,点击编译,运行。会出现只有两个按钮的对话框应用程序,点击读取图像,结果出现这样的错误:

这是因为无法读取图像。将要处理的图像复制到工程目录下。再次运行。可以正确的读取图像,但是,此时的窗口不在对话框中。如下图所示:

这是因为open_window(0,0,Width/2,Height/2,0,"","",&WindowHandle);中所指定的父窗口为0,意味着指定的父窗口为桌面,此时需要将其父窗口改为对话框。为此,在该句所在的响应的函数中添加此句:

Hlong MainWndID =(Hlong) m_hWnd;

并修改open_window的参数,用MainWndID代替0.

最终运行结果如下:

与halcon中运行结果一样。

</!DOCTYPE>

时间: 2024-10-09 21:48:07

解决问题1:可以从桌面显示到FORM MFC/HALCON混合编程系列一_打开图像_简单处理_的相关文章

android 实现桌面显示内容

//获取windowmanager 对象 WindowManager wm = (WindowManager) getApplicationContext().getSystemService(WINDOW_SERVICE); //初始化桌面需显示的视图 View view = LayoutInflater.from(context).inflate(R.layout.message_item_im_left, null); //获取layoutparams对象 设置view的在桌面显示的样式

iis可以运行但是界面不能在桌面显示是怎么回事

iis可以运行但是界面不能在桌面显示是怎么回事 引用:https://zhidao.baidu.com/question/1948053642075906588.html 在开始->运行 执行inetmgr.exe /reset 原文地址:https://www.cnblogs.com/xiaoruilin/p/10807722.html

OpenCV 2.2版本以上显示图片到 MFC 的 Picture Control 控件中

OpenCV 2.2 以及后面的版本取消掉了 CvvImage.h 和CvvImage.cpp 两个文件,直接导致了苦逼的程序员无法调用里面的显示函数来将图片显示到 MFC 的 Picture Control 控件中.为此,网上很多人表示只要将那两个文件人为的提取出来然后放到工程里面就解决问题了,也提供了两个文件的下载,但是这麻烦不说,还会导致一些奇奇怪怪的报错(至少本人是这样的,很崩溃!).所以在了解了一些gdi绘图之后结合网上的代码写了如下的函数,只需调用就可以将OpenCV的图片显示在上面

在父窗口的中间位置显示子窗口 MFC

CRect rect; GetWindowRect(rect);//该函数返回指定窗口的边框矩形的尺寸.该尺寸以相对于屏幕坐标左上角的屏幕坐标给出. //rect获得的坐标为当前窗体的坐标,对于显示器屏幕的最左上角为(0,0)点坐标,向下移动多少就加值多少 //假设要显示的对话框宽320,高140,(320,140),left.right是X轴坐标,left-right则为宽父窗体的宽,同理top.bottom是Y轴的坐标,相减为父窗体的高.left ;top; right;bottom;分别表

Win10系统,桌面显示不正常咋办?

有些时候,当我们使用Win10时会遇到桌面图标显示不正常的问题,其表现为图标显示为未知文件类型,或者是显示错乱,等等.虽然图标显示不正常不影响使用,但是看起来总是让人别扭.该问题在前几代Windows系统中同样经常出现,包括Win7.Win8.Win8.1.如果你遇到了这个问题可参考下面的方法来解决. 为了加速显示图标,系统会对文件/程序的图标进行缓存,这些缓存内容都存储在一个名为Iconcache.db的缓存文件中,当用户再次查看这些文件/程序时,不需要再从DLL等文件中重新获取图标,起到加速

windows桌面显示Windows系统信息

介绍 我们在使用azure的公有云时,可以看到打开虚拟机时右上角可以显示系统配置信息和公网私有地址,很好奇如何做到的,终于经过询问一位微软的朋友,他帮我找到了这个工具 工具地址:https://technet.microsoft.com/en-us/library/bb897557.aspx?f=255&MSPPError=-2147217396 工具使用 解压工具 解压出来后放到自己需要的位置,我把他放到program files文件夹 安装工具 选择需要显示在桌面的内容 设置显示内容 工具打

Eclipse 在ubuntu桌面显示快捷启动以及解决Eclipse 在ubuntu中点击菜单栏不起作用的原因.

要在Eclipse中设置好之后,可以通过如下方式在周末显示快捷启动以及解决Eclipse在ubuntu高版本中点击菜单栏项不显示列表的问题 在usr/share/app-install/desktop目录下创建一个eclipse.desktop文件,如下命令: sudo gedit /usr/share/app-install/desktop/eclipse.desktop 在这个文件中输入: [Desktop Entry] Name=eclipse Comment=eclipse IDE Ex

组策略统一在桌面显示计算机图标

域环境,桌面统一显示计算机图标,尝试多种方法,无果,就百度了一下如何使用注册表来显示此图标,然后应用到域环境中,测试后果然可用,特来共享一下. 环境如下:windows2012 +win7,8,10 方法如下: 选择如下: SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\NewStartPanel \{20D04FE0-3AEA-1069-A2D8-08002B30309D} 然后将数值数据由默认的1改为0即

fedora 20 如何在桌面显示图标

最近一位朋友问我为啥现在的 gnome 桌面上什么都不显示了.还有应用程序窗口上最大化.最小化的按钮怎么也都没了. 为啥呢,我只能说设计 gnome 的人都是傻 X,无他. 不过通过安装个gnome 的插件,还能解决这个问题. 首先安装 gnome-tweak-tool,安装方法就不多说了. 安装完之后,可以搜索 优化工具.图标有点像是个调音台. 之后就能进入 tweaks 的设置界面了. 在桌面那一栏里,可以开启 Icons on Desktop. 在窗口那一栏里,可以开启 应用程序的最大化和