深度那些快递到阿,中通申通快递 中通 圆通到吗

VC下调用Halcon库
在VC环境下进行图像处理比在MATLAB下开发运算速度要快,但工作量要大的多,用MATLAB做图像处理,直接调用里面的相关函数就可以完成,而且比较直观,但满足不了在速度上要求比较高的场合。所以在VC环境下直接开发往往是首选,但由于VC只是一个开发环境,直接运用于图像处理的函数还得自己编写添加,所以往往很耗时。随着各类机器视觉软件的开发,各种机器视觉软件包也相继产生,HALCON就是一个比较强大的机器视觉软件,功能比较全,在HDevelop环境下开发比较容易,执行速度也较快。除此之外,HALCON也可以集成到其他开发环境下,这样可以节约底层开发时间,直接有效地运用它的函数库,可以产生很好的效果。下面就结合自己的经验,简单介绍一下在VC环境下如何使用HALCON库。
在VC环境下进行图像处理,往往需要自己写图像处理的类,现在有一些前人写好的类,比如CDib类、DIBAPI类等等,因此可以直接“拿来主义”。HALCON库就相当于一个封装好的类,通过在VC下进行一些简单的设置,我们就可以使用其里面的函数了。下面是在VC环境下如何设置:
首先在project-&settings.....中的Link属性页-》常规-》对象库模板中添加halconcpp.lib;
其次在project-&settings.....中的C/C++属性页中的Preprocessor中添加目录$(HALCONROOT)\include,$(HALCONROOT)\include\cpp;
然后在project-&settings.....中的Link属性页中input下来菜单中添加路径$(HALCONROOT)\lib\x86sse2-win32;//根据不同的版本可能不所不同,可参考lib所在路径下的相关文件进行修改
4. 最后当然是不要忘了在程序中添加类的头文件了:#include
"halconcpp.h"
上面的设置好了,一切OK了。下面就可以在程序中调用HDevelop中的函数了。
vs2005 设定
1. 选择菜单栏里面的 【工具】
2. 点击 【选项】
5.添加头文件halconcpp.h到头文件里面,并在所利用halcon资源的类添加halconcpp.h
6.在解决方案 工程/解决方案-属性-配置属性-连接器-附加依赖项 添加halconcpp.lib
在链接器-命令行-添加halconcpp.lib
注意:1.如果编译再出链接错误的就是在项目里设定lib
2.Hdevelop导出的C++程序直接可用
3.同时可以添加Hdevelop到VB DELPHE C++++
halconing :
我一般在option里设置,不用每个工程都要重新设置一次了,这样方便多了
黑土halcon :
从halcon export出来的c++ code之后,一般是在VC上建立什么什么工程去编译c++ code?是win32
console application 还是 MFC还是其他的?
原文地址:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。1300人阅读
HALCON(28)
****************************************************************************************************
* Halcon例程学习:print_check.hev(光学字符检测)
* 光学字符检测:如何将变异模式(variation model)应用于典型印刷质量检测.
* 具体内容:例程用于检测钢笔笔夹上的不正确印刷.
* & & & & 首先,从正确印刷中创建变异模型。由于目标位置可以多种多样,因此需要先将图像变换到相关位置(如例子中首幅图像的
* & & & & 印刷目标位置)。HALCON的基于形状匹配算法可用于检测图像中印刷目标的位置和角度,计算出的位置和角度可用于变换图像
* & & & & 到参考位置。算法第二部分是对正确印刷图案或几种错误类型的印刷图案的检测和分类。
* 联系扣扣:
* 创作时间:
* 修改时间:
****************************************************************************************************
dev_update_pc ('off') & // 停止刷新PC
dev_update_window ('off') & // 停止刷新窗口
dev_update_var ('off') & // 停止刷新变量
read_image (Image, './images/pen/pen-01') &// 读取图像
get_image_size (Image, Width, Height) & &// 获得图像大小
dev_close_window () & // 关闭窗口
dev_open_window (0, 0, Width, Height, 'black', WindowHandle) & // 创建新窗口
get_system ('operating_system', OS) & // 获取操作系统类型
if (OS{0:2} = 'Win') & // Windows操作系统
& & set_font (WindowHandle, '-Courier New-18-*-*-*-*-')
else & // 其他操作系统
& & set_font (WindowHandle, '-adobe-courier-bold-r-normal--25-*-*-*-*-*-*-*')
dev_set_color ('red') & // 设置显示颜色
dev_display (Image) & &// 显示图像
****************************************************************************************************
* 注意:形状模型(shape model)将由ROI区域创建,该ROI是根据简单阈值分割自动计算出的区域.
* Note: the shape model will be constructed from a ROI that is computed
* automatically based on a simple image segmentation.
****************************************************************************************************
* threshold(Image : Region : MinGray, MaxGray : )&
* MinGray &= g &= &MaxGray
threshold (Image, Region, 100, 255) &// 固定阈值分割
fill_up (Region, RegionFillUp) & // 区域填充
difference (RegionFillUp, Region, RegionDifference) & // 区域做差
* shape_trans(Region : RegionTrans : Type : )&
* List of values: 'convex', 'ellipse', 'outer_circle', 'inner_circle',
* & & & & & & & & 'rectangle1', 'rectangle2', 'inner_rectangle1', 'inner_center'
shape_trans (RegionDifference, RegionTrans, 'convex') & // 区域形状变换
dilation_circle (RegionTrans, RegionDilation, 8.5) & & &// 区域圆形膨胀
reduce_domain (Image, RegionDilation, ImageReduced) & & // 区域缩小
* inspect_shape_model:创建形状模型.
* inspect_shape_model(Image : ModelImages, ModelRegions : NumLevels, Contrast : )&
* NumLevels:金字塔水平,默认为4;
* Contrast:Threshold or hysteresis thresholds for the contrast of the object in the image and optionally minimum size of the object parts.
inspect_shape_model (ImageReduced, ModelImages, ModelRegions, 1, 20)
* gen_contours_skeleton_xld:将骨架转换为XLD轮廓.
* gen_contours_skeleton_xld(Skeleton : Contours : Length, Mode : )&
gen_contours_skeleton_xld (ModelRegions, Model, 1, 'filter')
* area_center:获得区域面积和区域中心.
area_center (RegionDilation, Area, RowRef, ColumnRef)
* create_shape_model:创建用于匹配的形状模型.
*create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, Contrast, MinContrast : ModelID)&
* Template:用于创建模型的图像区域.
* NumLevels:金字塔水平的最大值.默认值为:'auto'.
* AngleStart:模型的最小旋转弧度,默认值为:-0.39.
* AngleExtent:模型旋转弧度的范围,默认值为:0.79.
* AngleStep:旋转弧度的步长(分辨率),默认值为:'auto',约束条件:(AngleStep &= 0) && (AngleStep &= (pi / 16))&
* Optimization:优化选项,默认值为:'auto'.
* Metric:匹配度量(Match metric),默认值为:'use_polarity'.
* Contrast:Threshold or hysteresis thresholds for the contrast of the object in the template image and optionally minimum size of the object parts.
* MinContrast:Minimum contrast of the objects in the search images. Restriction: MinContrast & Contrast.
* ModelID:Handle of the model.
create_shape_model (ImageReduced, 5, rad(-10), rad(20), 'auto', 'none', 'use_polarity', 20, 10, ShapeModelID)
* create_variation_model:创建图像比较的变异模型(variation model).
create_variation_model (Width, Height, 'byte', 'standard', VariationModelID)
for I := 1 to 15 by 1
& & read_image (Image, './images/pen/pen-'+I$'02d') &// 读取图像
& & * find_shape_model:查找图像中形状模型的最佳匹配.
& & * find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)&
& & find_shape_model (Image, ShapeModelID, rad(-30), rad(60), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
& & if (|Score| = 1)
& & & & * vector_angle_to_rigid:根据点和角度进行刚性仿射变换(rigid affine transformation).
& & & & * vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)&
& & & & vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)
& & & & * affine_trans_image:对图像进行任意2D仿射变换.
& & & & * affine_trans_image(Image : ImageAffinTrans : HomMat2D, Interpolation, AdaptImageSize : )&
& & & & affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')
& & & & * train_variation_model:训练变异模型(variation model).
& & & & * train_variation_model(Images : : ModelID : )&
& & & & train_variation_model (ImageTrans, VariationModelID)
& & & & dev_display (ImageTrans) // 显示仿射变换后图像
& & & & dev_display (Model) & // 显示轮廓线
* get_variation_model — Return the images used for image comparison by a variation model.
* get_variation_model( : Image, VarImage : ModelID : )&
get_variation_model (MeanImage, VarImage, VariationModelID)
* prepare_variation_model — Prepare a variation model for comparison with an image.
* prepare_variation_model( : : ModelID, AbsThreshold, VarThreshold : )&
prepare_variation_model (VariationModelID, 20, 3)
* clear_train_data_variation_model — Free the memory of the training data of a variation model.
* clear_train_data_variation_model( : : ModelID : )&
clear_train_data_variation_model (VariationModelID)
****************************************************************************************************
* 注意:印刷检测将被限制在笔夹范围内. 有时笔夹的印刷位置也可能是错误的,这将导致在笔夹的顶部或底部有处明显错误区域,
* & & &该区域很容易被检测出来.
****************************************************************************************************
* erosion_rectangle1:基于矩形结构元素的区域腐蚀.
* erosion_rectangle1(Region : RegionErosion : Width, Height : )&
erosion_rectangle1 (RegionFillUp, RegionROI, 1, 15)
dev_display (MeanImage) & // 显示平均值图像
set_tposition (WindowHandle, 20, 20) & // 设置文本光标位置
dev_set_color ('green') & // 设置显示颜色
write_string (WindowHandle, 'Reference image') & // 输出字符串
stop () & // 停止,按F5可继续运行
dev_display (VarImage) & // 显示方差图像
set_tposition (WindowHandle, 20, 20) & // 设置文本光标位置
dev_set_color ('green') & // 设置显示颜色
write_string (WindowHandle, 'Variation image') & // 输出字符串
stop () & // 停止,按F5可继续运行
dev_set_draw ('margin') & // 设置绘图模式
for I := 1 to 30 by 1
& & read_image (Image, './images/pen/pen-'+I$'02d') &// 读取图像
& & * find_shape_model:查找图像中形状模型的最佳匹配.
& & * find_shape_model(Image : : ModelID, AngleStart, AngleExtent, MinScore, NumMatches, MaxOverlap, SubPixel, NumLevels, Greediness : Row, Column, Angle, Score)&
& & find_shape_model (Image, ShapeModelID, rad(-10), rad(20), 0.5, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
& & if (|Score| = 1)
& & & & * vector_angle_to_rigid:根据点和角度进行刚性仿射变换(rigid affine transformation).
& & & & * vector_angle_to_rigid( : : Row1, Column1, Angle1, Row2, Column2, Angle2 : HomMat2D)&
& & & & vector_angle_to_rigid (Row, Column, Angle, RowRef, ColumnRef, 0, HomMat2D)
& & & & * affine_trans_image:对图像进行任意2D仿射变换.
& & & & * affine_trans_image(Image : ImageAffinTrans : HomMat2D, Interpolation, AdaptImageSize : )&
& & & & affine_trans_image (Image, ImageTrans, HomMat2D, 'constant', 'false')
& & & & reduce_domain (ImageTrans, RegionROI, ImageReduced) & & // 区域缩小
& & & & * compare_variation_model — Compare an image to a variation model.
& & & & * compare_variation_model(Image : Region : ModelID : )&
& & & & compare_variation_model (ImageReduced, RegionDiff, VariationModelID)
& & & & * connection — Compute connected components of a region.
& & & & * connection(Region : ConnectedRegions : : )
& & & & connection (RegionDiff, ConnectedRegions)
& & & & * select_shape — Choose regions with the aid of shape features.
& & & & * select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )&
& & & & select_shape (ConnectedRegions, RegionsError, 'area', 'and', 20, 1000000)
& & & & count_obj (RegionsError, NumError) & // 计算目标个数
& & & & dev_clear_window () & // 清空窗口
& & & & dev_display (ImageTrans) & // 显示变换图像
& & & & dev_set_color ('red') & // 设置显示颜色
& & & & dev_display (RegionsError) & // 显示错误区域
& & & & set_tposition (WindowHandle, 20, 20) & // 设置文本光标位置
& & & & if (NumError = 0)
& & & & & & dev_set_color ('green') & // 设置显示颜色
& & & & & & write_string (WindowHandle, 'Clip OK') & // 输出字符串
& & & & else
& & & & & & dev_set_color ('red') & // 设置显示颜色
& & & & & & write_string (WindowHandle, 'Clip not OK') & // 输出字符串
& & & & endif
& & stop ()
* clear_shape_model — Free the memory of a shape model.
* clear_shape_model( : : ModelID : )&
clear_shape_model (ShapeModelID)
* clear_variation_model — Free the memory of a variation model.
* clear_variation_model( : : ModelID : )&
clear_variation_model (VariationModelID)
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:123724次
积分:2675
积分:2675
排名:第12379名
原创:142篇
转载:51篇
(2)(2)(1)(8)(15)(2)(2)(1)(58)(4)(37)(32)(8)(21)2431人阅读
编程语言之C++(17)
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon学习方法:安装完halcon之后,在开始里出现一些文档
看完就算是入门了,里面讲了大部分应用的需要的步骤及所用算法
quick_guide.pdf
快速入门halcon
hdevelop_users_guide.pdf
详细讲解在hdevelop中使用halcon,及hdevelop的操作
programmers_guide.pdf
详细讲解在高级语言中的使用halcon
reference_hdevelop.pdf
讲解各个算子
安装完halcon会自动添加一个环境变量%HALCONROOT%,比如指向C:\Program Files\MVTec\HALCON-10.0
在%HALCONROOT%\examples目录下是各种高级语言使用halcon的源码例子
http://blog.csdn.net/wgluser/article/category/1183275
.cn/s/articlelist__0_1.html
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用halcon窗口加载图像
1.读取图像
read_image&(Lena,&'F:/image/lena.jpg')&&get_image_size&(Lena,&Width,&Height)&&dev_close_window&()&&dev_open_window&(0,&0,&Width/2,&Height/2,&'black',&WindowHandle)&&set_display_font&(WindowHandle,&14,&'mono',&'true',&'false')&&dev_display&(Lena)&&disp_continue_message&(WindowHandle,&'black',&'true')&&stop&()&&
2.导出vb的bas代码
选择文件/导出,弹出
注意:此处选择使用halcon窗口
3.vb中调用read_image.bas
先看一下read_image.bas的内容,可知在需要的地方直接调用main即可
...&&&&'&Main&procedure&&Private&Sub&action()&&&&&&'&Local&iconic&variables&&&&Dim&ho_Lena&As&HUntypedObjectX&&&&&&&&'&Local&control&variables&&&&Dim&hv_Width&As&Variant,&hv_Height&As&Variant&&&&Dim&hv_WindowHandle&As&Variant&&&&&&&&Call&Op.ReadImage(ho_Lena,&&F:/image/lena.jpg&)&&&&Call&Op.GetImageSize(ho_Lena,&hv_Width,&hv_Height)&&&&If&COMExpWinHandleStack.IsOpen()&Then&&&&&&Op.CloseWindow&(COMExpWinHandleStack.Pop())&&&&End&If&&&&Call&Op.SetWindowAttr(&background_color&,&&black&)&&&&Call&Op.OpenWindow(0,&0,&Tuple.TupleDiv(&_&&&&&&&&hv_Width,&2),&Tuple.TupleDiv(hv_Height,&2),&0,&&&,&&&,&hv_WindowHandle)&&&&COMExpWinHandleStack.Push&(hv_WindowHandle)&&&&Call&set_display_font(hv_WindowHandle,&14,&&mono&,&&true&,&&false&)&&&&If&COMExpWinHandleStack.IsOpen()&Then&&&&&&Call&Op.DispObj(ho_Lena,&COMExpWinHandleStack.GetActive())&&&&End&If&&&&Call&disp_continue_message(hv_WindowHandle,&&black&,&&true&)&&&&HDevelopStop&&End&Sub&&&&&#If&Not&NO_EXPORT_APP_MAIN&Then&&Sub&InitHalcon()&&&&'&Default&settings&used&in&HDevelop&&&&Call&Op.SetSystem(&do_low_error&,&&false&)&&End&Sub&&&&Sub&Main()&&&&Call&InitHalcon&&&&Call&action&&End&Sub&&&#End&If&&
3.1.新建一个exe的project,然后保存,然后添加read_image.bas文件到此project
3.2.添加halcon/com控件:选择project/components,弹出的菜单中
3.3.在工具箱中会出现HWindowXCtrl控件,拖进form1,然后再拖一个commandbutton,
双击commanbutton,加入代码
Private&Sub&Command1_Click()&&Call&Main&&End&Sub&&
3.4.按F5运行程序,然后单击command1,弹出
这是一个halcon界面库构造的窗口,脱离vb窗口的。
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加载图像
在上面第2步选择使用导出模板。
导出的代码如下,可知需要调用的过程是inithalcon和runhalcon
...&&'&Main&procedure&&Private&Sub&action()&&&&&&'&Local&iconic&variables&&&&Dim&ho_Lena&As&HUntypedObjectX&&&&&&&&'&Local&control&variables&&&&Dim&hv_Width&As&Variant,&hv_Height&As&Variant&&&&Dim&hv_WindowHandle&As&Variant&&&&&&Call&Op.ReadImage(ho_Lena,&&F:/image/lena.jpg&)&&&&Call&Op.GetImageSize(ho_Lena,&hv_Width,&hv_Height)&&&&'dev_close_window(...);&&&&'dev_open_window(...);&&&&Call&set_display_font(hv_ExpDefaultWinHandle,&14,&&mono&,&&true&,&&false&)&&&&Call&Op.DispObj(ho_Lena,&hv_ExpDefaultWinHandle)&&&&Call&disp_continue_message(hv_ExpDefaultWinHandle,&&black&,&&true&)&&&&HDevelopStop&&End&Sub&&&&&&&&Sub&InitHalcon()&&&&'&Default&settings&used&in&HDevelop&&&&Call&Op.SetSystem(&do_low_error&,&&false&)&&End&Sub&&&&Sub&RunHalcon(ByRef&Window&As&HWindowX)&&&&hv_ExpDefaultWinHandle&=&Window.HalconID&&&&Call&action&&End&Sub&&
在上面的3.3中拖入一个commandbutton2,双击添加代码
Private&Sub&Form_Load()&&&&&&Call&InitHalcon&&End&Sub&&&&Private&Sub&Command2_Click()&&Call&RunHalcon(HWindowXCtrl.HalconWindow)&&End&Sub&&
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
vb中使用hwindowxctrl的窗口加载视频
1.插入摄像头,只要qq视频模块可以使用的摄像头,halcon基本都可以使用吧
2.在halcon中新建一个工程,文件/新程序
3.选择助手/打开新的imageaquisition,点击检测,会检测到directshow
观察连接标签栏里已经识别出中微星的摄像头,可以点击连接,实时查看一下。
颜色空间中可以选择以灰度方式采集图像。
4.选择生成代码标签,如下。同步采集。
选择插入代码,如下
*&Code&generated&by&Image&Acquisition&01&&open_framegrabber&('DirectShow',&1,&1,&0,&0,&0,&0,&'default',&8,&'rgb',&-1,&'false',&'default',&'Vimicro&USB&PC&Camera&(ZC030x)',&0,&-1,&AcqHandle)&&while&(true)&&&&&&grab_image&(Image,&AcqHandle)&&&&&&*&Do&something&&endwhile&&close_framegrabber&(AcqHandle)&&
open_framegrabber用于打开摄像头并配置,此函数在调用时会测试要指定的设备,并锁定该设备。之后可以使用grab_image, grab_data, grab_image_async, or grab_data_async获取图像,然后处理。使用完之后需要用close_framegrabber释放,否则别的进程无法使用
grab_image采集图像到Image
close_framegrabber 关闭设备
在grab_image (Image, AcqHandle)后面加一句dev_display(Image),把图像显示出来
5.导出vb代码
...&&'&Main&procedure&&Private&Sub&action()&&&&&&'&Local&iconic&variables&&&&Dim&ho_Image&As&HUntypedObjectX&&&&&&&&'&Local&control&variables&&&&Dim&hv_AcqHandle&As&Variant&&&&&&'Code&generated&by&Image&Acquisition&01&&&&Call&Op.OpenFramegrabber(&DirectShow&,&1,&1,&0,&0,&0,&0,&&default&,&8,&&rgb&,&-1,&_&&&&&&&&&false&,&&default&,&&Vimicro&USB&PC&Camera&(ZC030x)&,&0,&-1,&hv_AcqHandle)&&&&Do&While&1&&&&&&Call&Op.GrabImage(ho_Image,&hv_AcqHandle)&&&&&&Call&Op.DispObj(ho_Image,&hv_ExpDefaultWinHandle)&&&&&&'Do&something&&&&&&#If&USE_DO_EVENTS&Then&&&&&&'&Please&note:&The&call&of&DoEvents()&is&only&a&hack&to&&&&&&'&enable&VB&to&react&on&events.&Please&change&the&code&&&&&&'&so&that&it&can&handle&events&in&a&standard&way.&&&&&&DoEvents&&&&&&#End&If&&&&Loop&&&&Call&Op.CloseFramegrabber(hv_AcqHandle)&&End&Sub&&&&&&&&Sub&InitHalcon()&&&&'&Default&settings&used&in&HDevelop&&&&Call&Op.SetSystem(&do_low_error&,&&false&)&&End&Sub&&&&Sub&RunHalcon(ByRef&Window&As&HWindowX)&&&&hv_ExpDefaultWinHandle&=&Window.HalconID&&&&Call&action&&End&Sub&&
vb中调用方式很简单仍然是inithalocn和runhalcon
把read_camera.bas加进vb,添加代码
Private&Sub&Form_Load()&&&&&&Call&InitHalcon&&End&Sub&&&&Private&Sub&Command3_Click()&&Call&RunHalcon(HWindowXCtrl.HalconWindow)&&End&Sub&&
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
需要注意的问题,
在hdevelop中的stop命令导入到vb.bas就变成HDevelopStop
HDevelopStop有两个版本实现,一个是空函数(使用halcon窗口导出时),一个是如下(使用导出模板时)
Public&Sub&HDevelopStop()&&&&Call&MsgBox(&Press&button&to&continue&,&vbYes,&&Program&stop&,&&&,&1000)&&End&Sub&&
在采集视频时,程序退出之前需要close_framegrabber,否则会出错
halcon error#5322:image aquisition:timeout.
此时需要重插一下camera
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
halcon播放avi视频
/******************************************************************/
vc使用halcon
使用hdevelop导出halcon程序的c++代码之后,比如
read_image&(image,&'C:/Documents&and&Settings/Administrator/桌面/vision/IMG_436.bmp')&&rgb1_to_gray&(image,&GrayImage)&&dev_set_color('blue')&&*bin_threshold&(GrayImage,&Region)&&threshold(GrayImage,Region,100,255)&&area_center&(Region,&Area,&Row,&Column)&&
生成c++代码
///////////////////////////////////////////////////////////////////////////////&&//&&File&generated&by&HDevelop&for&HALCON/C++&Version&10.0&&///////////////////////////////////////////////////////////////////////////////&&&&&&&&#include&&HalconCpp.h&&&&&&&&&using&namespace&H&&&&&&#ifndef&NO_EXPORT_MAIN&&//&Main&procedure&&&void&action()&&{&&&&using&namespace&H&&&&&&//&Local&iconic&variables&&&&&Hobject&&image,&GrayImage,&R&&&&&&&&//&Local&control&variables&&&&&HTuple&&Area,&Row,&C&&&&&&read_image(&image,&&C:/Documents&and&Settings/Administrator/桌面/vision/IMG_436.bmp&);&&&&rgb1_to_gray(image,&&GrayImage);&&&&if&(HDevWindowStack::IsOpen())&&&&&&set_color(HDevWindowStack::GetActive(),&blue&);&&&&bin_threshold(GrayImage,&&Region);&&&&area_center(Region,&&Area,&&Row,&&Column);&&&&}&&&&&&#ifndef&NO_EXPORT_APP_MAIN&&int&main(int&argc,&char&*argv[])&&{&&&&using&namespace&H&&&&//&Default&settings&used&in&HDevelop&(can&be&omitted)&&&&&set_system(&do_low_error&,&false&);&&&&action();&&&&return&0;&&}&&#endif&&&&&&#endif&&
新建一个对话框mfc程序(vc2008),添加一个按钮button1,加入如下代码(我将action函数稍微改了一下)
当然先要#include &HalconCpp.h&
//&Main&procedure&&&double&action(&char&*&p)&&{&&&&&&using&namespace&H&&&&&&//&Local&iconic&variables&&&&&&&Hobject&&image,&GrayImage,&R&&&&&&&&//&Local&control&variables&&&&&&&HTuple&&Area,&Row,&C&&&&&&&&read_image(&image,&p);&&&&&&rgb1_to_gray(image,&&GrayImage);&&&&&&if&(HDevWindowStack::IsOpen())&&&&&&&&&&set_color(HDevWindowStack::GetActive(),&blue&);&&&&&&//bin_threshold(GrayImage,&&Region);&&&&&&threshold(GrayImage,&&Region,50,255);&&&&&&area_center(Region,&&Area,&&Row,&&Column);&&&&&&double&d=Area[0];&&&&&&return&d;&&&&}&&&&&&void&CabcDlg::OnBnClickedButton1()&&{&&&&&&//&TODO:&在此添加控件通知处理程序代码&&&&&&double&d=action(&C:/Documents&and&Settings/Administrator/桌面/vision/IMG_436.bmp&);&&&&&&CString&&&&&&&str.Format(&%f&,d);&&&&&&AfxMessageBox(str);&&}&&
编译程序之前需要先设置一下include和链接环境,对于vc2008
工具/选项/项目解决方案/vc++目录/包含文件/&& 添加
C:\Program Files\MVTec\HALCON-10.0\include
C:\Program Files\MVTec\HALCON-10.0\include\cpp
工具/选项/项目解决方案/vc++目录/库文件/&& 添加
C:\Program Files\MVTec\HALCON-10.0\lib\x86sse2-win32
然后执行即可。
vc使用picture control显示halcon采集的图像
1.在对话框中添加一个picture control,比如IDC_PIC_HWINDOW
2.在xxdlg.h中添加&&&
&& &HTuple m_HWindowID;//picture control经过处理之后标示符,以后显示图像时,直接显示在m_HWindowID即可。
&& &HTuple m_FGHandle,m_ImageWidth, m_ImageH//m_FGHandle是视频设备
&& &Hobject m_LiveI//从图片或视频中抓取图像到这个变量里面
3.在xxdlg.cpp中添加初始化picture control的函数。可以在OnInitDialog函数中调用之。
//&初始化HALCON显示窗口&&void&CabcdDlg::InitHalconWindow(void)&&{&&&&&&//定义显示的起点和长宽高&&&&&&HTuple&HWindowRow,HWindowColumn,HWindowWidth,HWindowH&&&&&&//定义窗口ID&&&&&&HTuple&HWindowID;&&&&&&&&&&//定义一个CRect类的对象,用于获取图像框的尺寸和位置&&&&&&CRect&R&&&&&&CWnd&*pWnd&=&GetDlgItem(IDC_PIC_HWINDOW);&&&&&&CDC&*pDC&=&pWnd-&GetDC();&&&&&&pWnd-&GetWindowRect(&Rect);&&&&&&&&&&//设置显示窗口的起点和宽高&&&&&&HWindowRow&=&0;&&&&&&HWindowColumn&=&0;&&&&&&HWindowWidth&=&Rect.Width();&&&&&&HWindowHeight&=&Rect.Height();&&&&&&//设定固定的窗口大小,而不是根据控件大小设定&&&&&&//GetDlgItem(IDC_PIC_HWINDOW)-&SetWindowPos(NULL,0,0,322,242,SWP_NOZORDER&|&SWP_NOMOVE);&&&&&&try&&&&&&{&&&&&&&&&&set_window_attr(&border_width&,0);&&&&&&&&&&HWindowID&=&(Hlong)pWnd-&m_hW&&&&&&&&&&open_window(HWindowRow,HWindowColumn,HWindowWidth,HWindowHeight,HWindowID,&visible&,&&,&m_HWindowID);&&&&&&&&&&set_draw(m_HWindowID,&margin&);//设置显示模式是margin(边缘)&&&&&&}&&&&&&catch&(HException&&except)&&&&&&{&&&&&&&&&&TRACE(except.message);&&&&&&}&&}&&
如果要显示图像,
read_image(&m_LiveImage,&&C:/Documents&and&Settings/Administrator/桌面/6870_3.jpg&);&&disp_obj(m_LiveImage,&m_HWindowID);&&&
如果要显示视频
&&&&try&&&&&&{&&&&&&&&&&//open_framegrabber(&DirectShow&,&1,&1,&0,&0,&0,&0,&&default&,&8,&&rgb&,&-1,&&false&,&&default&,&&USB&视频设备&,&0,&-1,&&m_FGHandle);&&&&&&&&&&open_framegrabber&(&DirectShow&,&1,&1,&0,&0,&0,&0,&&default&,&8,&&rgb&,&-1,&&false&,&&default&,&&Vimicro&USB&PC&Camera&(ZC030x)&,&0,&-1,&&m_FGHandle);&&&&&&&&&&//打开异步采集&&&&&&&&&&grab_image_start&(m_FGHandle,&-1);&&&&&&&&&&&&&&&&&&&&while&(1)&&&&&&&&&&{&&&&&&&&&&&&&&grab_image_async(&m_LiveImage,&m_FGHandle,&-1);//采集一副图像&&&&&&&&&&&&&&get_image_pointer1(m_LiveImage,&NULL,&NULL,&&m_ImageWidth,&&m_ImageHeight);//得到图像的宽高和指针&&&&&&&&&&&&&&set_part(m_HWindowID,&0,&0,&m_ImageHeight&-&1,&m_ImageWidth&-1);//使图像显示适应窗口大小&&&&&&&&&&&&&&disp_obj(m_LiveImage,&m_HWindowID);&&&&//窗口中显示图像&&&&&&&&&&}&&&&&&&&&&&&close_framegrabber(m_FGHandle);&&&&&&}&&&&&&catch&(HException&&except)&&&&&&{&&&&&&&&&&TRACE(except.message);&&&&&&}&&
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:27609次
排名:千里之外
转载:29篇
(1)(5)(2)(1)(15)(1)(2)(4)(1)(2)

我要回帖

更多关于 中通跟申通哪个快递快 的文章

 

随机推荐