C++实例(halcon加载图片到mfc

合集下载

Halcon读取文件目录中图像的三种方法

Halcon读取文件目录中图像的三种方法

Halcon读取文件目录中图像的三种方法第1种方法:读取单一图像read_image(Image,'fabrik')这种方式可以快速的读取软件自身携带的库图像文件,系统设定了库图像映像文件的快速读取方式,我们也可以通过绝对地址的方式来读取指定的目录文件:read_image(Image1,'E:/Halcon一日一练/参考资料/images/图片1.jpg')图像设定的映像文件目录可以进行关闭,set_system函数可以对映像文件目录进行关闭,关闭之后必须读取图像的绝对地址,否则,系统将会报错,set_system('image_dir','false')//关闭图像映像文件read_image(Image,'fabrik')//此时系统会报错在关闭图像文件目录的情况下,再读取图像将会出现异常,此时我们需要重新设置默认读取文件的目录:set_system('image_dir','C:\\ProgramFiles\\MVTec\\HALCON-12.0\\images')read_image(Image,'fabrik')如果想要读取自身设定的图像目录,则是如下方式:set_system('image_dir','E:\\Halcon一日一练\\参考资料\\images')read_image(Image,'图片1')操作完成后一定要将系统设定回来,并确认目录定义符一定是上斜线set_system('image_dir','C:\\ProgramFiles\\MVTec\\HALCON-12.0\\images')set_system('image_dir,'true')第2种方法:读取一组图像则需要对图像文件的保存名称有一定的规则要求,一般按以下格式设定:'name_number.imageform'首先保存为图像的名称,下划线后面追加图像数字序列,这种方式有利于图像的循环读取,看看下面的语句:for j:= 1 to 9 by 1read_image(Image,'fonts/arial_a'+J+'.png')//读取图像dev_display(Image)//显示图像stop()//暂停endfor我们将C:\Program Files\MVTec\Halcon-12.0\images\fonts目录下的9个图像文件依次读取并且显示出来,中间的+号代表了字符间的合并。

MFC在对话框显示图片的多种方法-动态载入图片

MFC在对话框显示图片的多种方法-动态载入图片

MFC在对话框显示图片的多种方法-动态载入图片MFC 在对话框显示图片的多种方法-动态载入图片函数说明========================================= ========================函数说明void LoadImage(DWORD nID,LPCTSTR ImageURL)参数说明:nID 需要绘制图像的窗口ImageURL 图象在硬盘上的地址(动态载入,只支持BMP图象)void ShowImage(DWORD nID)参数说明:nID 需要绘制图像的窗口实现过程========================================= ========================实现过程1.首先在CLoginDlg类中声明一个变量: CBitmap m_bmp;2.在对话框中加入一个picture 标签,名为IDC_STATIC1,作为绘制图像的窗口.3.BOOL CLoginDlg::OnInitDialog(){CDialogDlg::OnInitDialog();LoadImage(IDC_STATIC1,"c:\\\\login.bmp");return TRUE;}4.void CLoginDlg::OnPaint(){//CPaintDC dc(this); 一定要去除// TODO: Add your message handler code hereShowImage(IDC_STATIC1);}函数过程========================================= ========================函数过程void CLoginDlg::LoadImage(DWORD nID,LPCTSTR ImageURL){if( m_bmp.m_hObject != NULL )//判断m_bmp.DeleteObject();/////////载入图片HBITMAP hbmp = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),ImageURL,IMA GE_BITMAP,0,0,LR_CREATEDIBSECTION|LR_LOADFROMFILE);if( hbmp == NULL )return FALSE;////////该断程序用来取得加载的BMP的信息m_bmp.Attach( hbmp );DIBSECTION ds;BITMAPINFOHEADER &bminfo = ds.dsBmih;m_bmp.GetObject( sizeof(ds), &ds );int cx=bminfo.biWidth; //得到图像宽度int cy=bminfo.biHeight; //得到图像高度///////得到了图像的宽度和高度后,我们就可以对图像大小进行适应,即调整控件的大小,让它正好显示一张图片CRect rect;GetDlgItem(nID)->GetWindowRect(&rect);ScreenToClient(&rect);GetDlgItem(nID)->MoveWindow(rect.left,rect.top,cx,cy,true) ;//调整大小return TRUE;}void CLoginDlg::ShowImage(DWORD nID){///////绘制图像//CPaintDC dc(this); //若用此句,得到的是对话框的DC,图片将被绘制在对话框上.CPaintDC dc(GetDlgItem(nID)); //用此句,得到picture控件的DC,图像将被绘制在控件上.//CDC dc;//dc.m_hDC=::GetDC(NULL); //若用此两句,得到的是屏幕的DC,图片将被绘制在屏幕上.CRect rcclient;GetDlgItem(nID)->GetClientRect(&rcclient);CDC memdc;memdc.CreateCompatibleDC(&dc);CBitmap bitmap;bitmap.CreateCompatibleBitmap(&dc, rcclient.Width(), rcclient.Height());memdc.SelectObject( &bitmap );CWnd::DefWindowProc(WM_PAINT,(WPARAM)memdc.m_hDC , 0);CDC maskdc;maskdc.CreateCompatibleDC(&dc);CBitmap maskbitmap;maskbitmap.CreateBitmap(rcclient.Width(), rcclient.Height(), 1, 1, NULL);maskdc.SelectObject( &maskbitmap );maskdc.BitBlt( 0, 0, rcclient.Width(), rcclient.Height(), &memdc,rcclient.left, rcclient.top, SRCCOPY);CBrush brush;brush.CreatePatternBrush(&m_bmp);dc.FillRect(rcclient, &brush);dc.BitBlt(rcclient.left, rcclient.top, rcclient.Width(),rcclient.Height(),&memdc, rcclient.left,rcclient.top,SRCPAINT);brush.DeleteObject();}。

mfc中picture control使用

mfc中picture control使用

mfc中picture control使用在MFC中,Picture Control是一个用于显示图片的用户界面控件。

它通常用于在应用程序中展示图像内容。

以下是使用MFC中的Picture Control控件的步骤:1、添加Picture Control控件:在Visual Studio的设计视图中,打开你的对话框资源。

在工具箱中,找到Picture Control 控件并将其拖动到对话框上。

2、关联Picture Control控件与变量:选中Picture Control控件,在属性窗口中找到IDC_STATIC对应的ID,然后将其改为一个唯一的ID,比如IDC_PICTURE。

同时,在Class View中为该控件添加一个对应的变量,类型选择为CStatic。

3、加载并显示图片:在代码中找到对应的消息处理函数(例如OnInitDialog),然后使用以下代码加载并显示图片:cpp// 加载图片资源HRSRC hResource = FindResource(AfxGetResourceHandle(),MAKEINTRESOURCE(IDB_PICTURE), RT_RC);HGLOBAL hGlobal = LoadResource(AfxGetResourceHandle(), hResource);// 获取图片数据的指针LPCTSTR lpData = (LPCTSTR)LockResource(hGlobal);// 计算图片大小DWORD dwSize = SizeofResource(AfxGetResourceHandle(), hResource);// 创建位图对象CBitmap bitmap;bitmap.CreateFromBase(lpData, dwSize, NULL, LR_CREATEDIBSECTION);// 获取Picture Control控件的句柄HWND hWndPicture = GetDlgItem(IDC_PICTURE);// 创建兼容的DC(设备上下文)对象CDC compatibleDC;compatibleDC.CreateCompatibleDC(&compatibleDC);// 创建位图对象兼容的位图CBitmap* pOldBitmap = compatibleDC.SelectObject(&bitmap);// 将位图绘制到Picture Control控件上BitBlt(hWndPicture, 0, 0, bitmap.GetWidth(), bitmap.GetHeight(), &compatibleDC, 0, 0, SRCCOPY);// 释放资源compatibleDC.SelectObject(pOldBitmap);FreeResource(hGlobal);上述代码假设你的图片资源已经添加到资源文件中,并且资源的ID为IDB_PICTURE。

C#和Halcon交互实现图片的放大和缩小

C#和Halcon交互实现图片的放大和缩小

C#和Halcon交互实现图⽚的放⼤和缩⼩【转载】e.Delta>0表⽰⿏标向上滚动,e.Delta<0表⽰向下滚动要拖动的图像为Measure.currentImageL,可以更换。

#region⿏标实现放⼤缩⼩,移动图⽚//⿏标滚动事件:实现放⼤和缩⼩图像private void WinHandle_HMouseWheel(object sender, HalconDotNet.HMouseEventArgs e){try{HWindowControl WinHandle = sender as HWindowControl;HObject ho_currentImage = null;HOperatorSet.GenEmptyObj(out ho_currentImage);if ( == "WinHandle_Left"){ho_currentImage = Measure.ho_CurrentImageL;}if ( == "WinHandle_Right"){ho_currentImage = Measure.ho_CurrentImageR;}//放⼤倍数,当前⿏标选择的图像点坐标Row, Col,按下⿏标的左键还是右键:o-没按下,1-左键,2-中键,4-右键HTuple Zoom, Row, Col, Button;HTuple RowLeftUpper, ColumnLeftUpper, RowRightLower, ColumnRightLower, Ht, Wt, ImagePartRowLeftUp, ImagePartColLeftUp, ImagePartRowRightLow, ImagePartColRightLow;//⿏标向上滚动表⽰放⼤if (e.Delta > 0){Zoom = 1.5;}//向下滚动缩⼩else{Zoom = 0.5;}//返回输出窗⼝中⿏标指针和⿏标按钮所按下的像素精确图像坐标,输出当前⿏标指针点的图像坐标以及按下的是⿏标左键还是右键,0是⿏标左键HOperatorSet.GetMposition(WinHandle.HalconWindow, out Row, out Col, out Button);//Get part返回窗⼝中显⽰的图像部分的左上⾓和右下⾓//得到当前的窗⼝坐标,Row0:图像部分左上⾓的⾏索引,Column0:图像部分左上⾓的列索引,Row00:图像部分右下⾓的⾏索引,Column00:图像部分右下⾓的列索引HOperatorSet.GetPart(WinHandle.HalconWindow, out RowLeftUpper, out ColumnLeftUpper, out RowRightLower, out ColumnRightLower);//显⽰的部分图像的⾼Ht = RowRightLower - RowLeftUpper;//显⽰的部分图像的宽Wt = ColumnRightLower - ColumnLeftUpper;//普通版halcon能处理的图像最⼤尺⼨是32K*32K。

如何使用VC在Halcon中得到像素的信息

如何使用VC在Halcon中得到像素的信息

如何使用VC在Halcon中得到像素的信息Halcon的强大功能使我们省去很多图像处理(机器视觉)中的很多麻烦而又重复性的工作。

但是,面向不同的应用,应该编写自己最核心的算法,从而达到最佳的处理效果;而且Halcon并不可能把各种情况都考虑进去。

以下是我初步入门Halcon和VC的一点感触和想法,已经被实验证明了是正确的。

1,在VC中,使用Halcon打开图像文件,这里要注意read_image()和get_image_pointer1()指令被HDevelop翻译过来以后如下:Hobject ImageHTuple Pointer, Type, Width, Heightget_image_pointer1(Image, &Pointer, &Type, &Width, &Height);VC中如下声明:Halcon::Hobject ImageHalcon::HTuple Pointer, Type, Width, HeightVC中也可以如下声明使用:Hobject ImageChar lpcsType[MAX_STRING]Hlong Pointer, Width, Height 或long Width, Height(如果定义为HTuple Pointer ; Hlong Width, Height; 编译会出现错误;使用Halcon::HTuple Pointer, Type, Width, Height的话,后续中需要图像的高宽时,强制类型转换不可用;当然Hlong可以换成long,推荐使用Hlong。

)get_image_pointer1(Image, &Pointer, lpcsType, &Width, &Height);这里注意,在VC中如果get_image_pointer1( )中的字节类型使用tuple变量,那么Width和Height也必须使用tuple变量,否则编译时候容易出错误,至于原因是什么,可能halcon编译的时候需要各个参数的类型形式一致。

HALCON数字图像处理(刘国华)第12章 HALCON混合编程

HALCON数字图像处理(刘国华)第12章 HALCON混合编程
第12章 HALCON混合编程
德国HALCON是一款具有交互式编程开发的图像处理软件,可导出VB C/C++,C#等代码,利用其自有的HDevelop编程工具,可以轻松地实 现代码从HALCON算子到C、C++、C#等程序语言的转化。利用 HDevelop进行图像分析,完成视觉处理程序的开发,程序可以分成不 同的子程序,每个子程序可以只做一件事,像初始化,计算,或是清 除。主程序用于调用其它子程序,传递图像信息或是接收显示结果。 最后,程序导出成我们要用的程序代码,接续下一步工作。
HALCON数字图像处理
案例:芯片检测系统
图12-31 头文件设置
HALCON数字图像处理
案例:芯片检测系统
4)工程设置,和console程序相同,如图12-32和图12-33。
图12-32 工程设置一
HALCON数字图像处理
案例:芯片检测系统
HALCON数字图像处理
图12-33 工程设置二
案例:芯片检测系统
案例:成捆棒材复核计数系统
介绍:成捆复核计数系统是采用机器视觉技术检测棒材端面,通 过图像处理获得棒材中心信息并进行识别计数,实现准确复检计 数的新型检测装置。棒材复核计数系统是由工控机、光源、工业 相机、镜头和HALCON与VB混合编程的成捆棒材复核计数软件组 成。现场采集的成捆棒材图像如图12-2所示。
HALCON数字图像处理
图12-11
案例:电路板缺陷检测系统
新建项目如图12-12所示,选择.NET Framework 4 运行平台,创建 Windows窗体应用程序,修改解决方案名称为“混合编程”,项目 名称为“单片机实例”,选择程序保存路径,创建Form1窗体如图 12-13所示。

halcon与C#混合编程(三)数字识别

halcon与C#混合编程(三)数字识别

示例:数字识别要识别的图片:halcon源码:1: *读取图片2: read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg')3:4: *图像处理5: decompose3(Image, ImageR, ImageG, ImageB)6: threshold (ImageG, Regions, 0, 183)7: connection (Regions, Connection)8:9:select_shape (Connection, SelectedRegions, 'area', 'and', 1987.72, 7500)10:11: read_ocr_class_mlp('Document_0-9.omc',OCRHandle)12: do_ocr_multi_class_mlp(SelectedRegions,ImageG,OCRHandle, Class, Confidence)halcon导出的C#代码:1://2:// File generated by HDevelop for HALCON/DOTNET (C#) Version 10.0 3://4:// This file is intended to be used with the HDevelopTemplate or 5:// HDevelopTemplateWPF projects located under %HALCONEXAMPLES%\c# 6:7:using System;8:using HalconDotNet;9:10:publicpartialclass HDevelopExport11: {12:public HTuple hv_ExpDefaultWinHandle;13:14:// Main procedure15:privatevoid action()16: {17:18:// Local iconic variables19:20: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;21: HObject ho_Regions, ho_Connection, ho_SelectedRegions;22:23:24:// Local control variables25:26: HTuple hv_OCRHandle, hv_Class, hv_Confidence;27:28:// Initialize local and output iconic variables29: HOperatorSet.GenEmptyObj(out ho_Image);30: HOperatorSet.GenEmptyObj(out ho_ImageR);31: HOperatorSet.GenEmptyObj(out ho_ImageG);32: HOperatorSet.GenEmptyObj(out ho_ImageB);33: HOperatorSet.GenEmptyObj(out ho_Regions);34: HOperatorSet.GenEmptyObj(out ho_Connection);35: HOperatorSet.GenEmptyObj(out ho_SelectedRegions);36:37://读取图片38: ho_Image.Dispose();39: HOperatorSet.ReadImage(out ho_Image, "D:/MyFile/halcon/数字识别/1.jpg");40:41://图像处理42: ho_ImageR.Dispose();43: ho_ImageG.Dispose();44: ho_ImageB.Dispose();45: HOperatorSet.Decompose3(ho_Image, out ho_ImageR, outho_ImageG, out ho_ImageB46: );47: ho_Regions.Dispose();48: HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183); 49: ho_Connection.Dispose();50: HOperatorSet.Connection(ho_Regions, out ho_Connection);51:52: ho_SelectedRegions.Dispose();53: HOperatorSet.SelectShape(ho_Connection, outho_SelectedRegions, "area", "and",54: 1987.72, 7500);55:56: HOperatorSet.ReadOcrClassMlp("Document_0-9.omc", outhv_OCRHandle);57: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions,ho_ImageG, hv_OCRHandle,58:out hv_Class, out hv_Confidence);59:60: ho_Image.Dispose();61: ho_ImageR.Dispose();62: ho_ImageG.Dispose();63: ho_ImageB.Dispose();64: ho_Regions.Dispose();65: ho_Connection.Dispose();66: ho_SelectedRegions.Dispose();67:68: }69:70:publicvoid InitHalcon()71: {72:// Default settings used in HDevelop73: HOperatorSet.SetSystem("do_low_error", "false");74: }75:76:publicvoid RunHalcon(HTuple Window)77: {78: hv_ExpDefaultWinHandle = Window;79: action();80: }81:82: }83:C#工程:1:using System;2:using System.Collections.Generic;3:using ponentModel;4:using System.Data;5:using System.Drawing;6:using System.Linq;7:using System.Text;8:using System.Windows.Forms;9:10:using HalconDotNet;11:12:13:namespace NumericalRecognition14: {15:publicpartialclass FormMain : Form16: {17://增加代码:18: HDevelopExport HD = new HDevelopExport();19:string ImagePath;20:21:public FormMain()22: {23: InitializeComponent();24: btnRecognitionNumber.Enabled = false;25: }26:27:privatevoid btnOpenImage_Click(object sender, EventArgs e)28: {29: openFileDialog1.Filter = "JPEG文件|*.jpg*|BMP文件|*.bmp*|TIFF文件|*.tiff*";30:31: openFileDialog1.RestoreDirectory = true;32:33: openFileDialog1.FilterIndex = 1;34:35:if (openFileDialog1.ShowDialog() == DialogResult.OK)36:37: {38:39: ImagePath = openFileDialog1.FileName;40:41: HD.ReadImage(hWindowControl1.HalconWindow, ImagePath);42:43: btnRecognitionNumber.Enabled = true;44:45: }46: }47:48:privatevoid btnRecognitionNumber_Click(object sender, EventArgs e) 49: {50: HD.NumberRecognition();51: labNumber.Text = HD.hv_Class.ToString();52:53: btnRecognitionNumber.Enabled = false;54: }55: }56:57://halcon导出的类58:publicpartialclass HDevelopExport59: {60:public HTuple hv_ExpDefaultWinHandle;61:62: HObject ho_Image, ho_ImageR, ho_ImageG, ho_ImageB;63: HObject ho_Regions, ho_Connection, ho_SelectedRegions; 64:65:66:// Local control variables67: HTuple hv_OCRHandle, hv_Confidence;68:public HTuple hv_Class;69:70:publicvoid InitHalcon()71: {72:// Default settings used in HDevelop73: HOperatorSet.SetSystem("do_low_error", "false");74: }75:76:publicvoid ReadImage(HTuple Window,string ImagePath)77: {78: hv_ExpDefaultWinHandle = Window;79:80:// Initialize local and output iconic variables81: HOperatorSet.GenEmptyObj(out ho_Image);82:83://读取图片84: ho_Image.Dispose();85: HOperatorSet.ReadImage(out ho_Image, ImagePath);86: HOperatorSet.DispObj(ho_Image,hv_ExpDefaultWinHandle);87: }88:89:publicvoid NumberRecognition()90: {91: HOperatorSet.GenEmptyObj(out ho_ImageR);92: HOperatorSet.GenEmptyObj(out ho_ImageG);93: HOperatorSet.GenEmptyObj(out ho_ImageB);94: HOperatorSet.GenEmptyObj(out ho_Regions);95: HOperatorSet.GenEmptyObj(out ho_Connection);96: HOperatorSet.GenEmptyObj(out ho_SelectedRegions); 97://图像处理98: ho_ImageR.Dispose();99: ho_ImageG.Dispose();100: ho_ImageB.Dispose();101: HOperatorSet.Decompose3(ho_Image, out ho_ImageR, out ho_ImageG, out ho_ImageB102: );103: ho_Regions.Dispose();104: HOperatorSet.Threshold(ho_ImageG, out ho_Regions, 0, 183);105: ho_Connection.Dispose();106: HOperatorSet.Connection(ho_Regions, outho_Connection);107:108: ho_SelectedRegions.Dispose();109: HOperatorSet.SelectShape(ho_Connection, outho_SelectedRegions, "area", "and",110: 1987.72, 7500);111:112: HOperatorSet.ReadOcrClassMlp("Document_0-9.omc", out hv_OCRHandle);113: HOperatorSet.DoOcrMultiClassMlp(ho_SelectedRegions, ho_ImageG, hv_OCRHandle,114:out hv_Class, out hv_Confidence);115:116:117: ho_Image.Dispose();118: ho_ImageR.Dispose();119: ho_ImageG.Dispose();120: ho_ImageB.Dispose();121: ho_Regions.Dispose();122: ho_Connection.Dispose();123: ho_SelectedRegions.Dispose(); 124:125: }126:127: }128: }运行结果:。

halcon简单案例

halcon简单案例

halcon简单案例那咱们就来个超级简单又有趣的Halcon案例:检测圆。

想象一下,你有一张图片,上面可能有各种各样的形状,但是你就想找到那些圆溜溜的家伙,就像在一堆水果里挑出苹果一样。

首先呢,在Halcon里,你得把这张图片读进来。

这就好比你把水果盘端到面前,准备挑苹果啦。

代码大概是这样的:read_image(Image, 'your_image.jpg')这里的`read_image`就是Halcon里专门用来把图片读进程序的魔法咒语,`Image`是我们给这张图片取的名字,就像你给你的宠物取个名字一样,方便后面提到它。

`'your_image.jpg'`就是你图片的文件名啦,如果你的图片在别的地方或者是别的格式,你就得改改这个地方哦。

然后呢,我们要把这张图片变得黑白分明一点,这样更容易找到圆。

这就像是给水果打个光,让苹果更明显一样。

rgb1_to_gray(Image, GrayImage)`rgb1_to_gray`这个魔法就是把彩色的图片(RGB)变成灰色的,`GrayImage`就是变灰之后的图片的新名字啦。

接下来,就是找圆的关键时刻啦。

Halcon有个很厉害的工具,就像是专门用来找圆的小雷达:threshold(GrayImage, Region, 100, 255)closing_circle(Region, RegionClosing, 5.5)connection(RegionClosing, ConnectedRegions)select_shape(ConnectedRegions, SelectedRegions, ['circularity'], 'and', [0.8])`threshold`这个魔法呢,是把灰色图片里的颜色分分类,把比较亮的部分(这里我们设的是100到255之间的亮度)单独挑出来,变成一个区域,这个区域就叫`Region`。

halcon连接图像采集设备与halcon多线程采图

halcon连接图像采集设备与halcon多线程采图

Halcon连接采图设备与Halcon多线程采图大恒图像娄训志ØHalcon 介绍ØHalcon 采图知识与常用算子ØHalcon 连接采图设备ØHalcon 连接采图设备编程应用ØHalcon 连接多个采图设备ØHalcon 与多线程采图Ø相关背景MVTec公司是世界上最著名的机器视觉软件公司,也是世界上标准机器视觉软件的领导者。

MVTec公司具有强大的开发和技术支持能力,50%的成员具有博士学位和机器视觉领域的长期工作经验。

Ø什么是HalconHalcon是在世界范围内广泛使用的机器视觉软件。

用户可以利用其开放式结构快速开发图像处理和机器视觉应用软件。

ØHalcon包含些什么Halcon包含Blob分析,形态学,模式识别与匹配,测量,2、3D相机标定,双目视觉,立体匹配等性能杰出的图像算法,以及图像采集,I/O 通信等工具。

Ø为什么使用HalconHalcon支持Linux/UNIX,Windows32/64位等操作系统,所有的库均可以使用C,C++,C#,VB和delphi编程语言访问,使用比较方便。

Halcon能够从软件上帮助你,解决绝大多数机器视觉软件问题。

Ø图像采集Halcon尽可能地保证与硬件无关,支持大多数图像采集卡,及带有DirectShow和IEEE 1394驱动等的采集设备。

Halcon采集图像的特点•图像采集链接库,独立于其它图像处理链接库•一致的代码模板(磁盘文件和图像采集设备)•支持多个采集设备•同步和异步采集•支持外触发•图像尺寸、图像位数、颜色空间可调•支持颜色查找表•支持与设备相关的参数调整ØImages in Halcona.Multiple channels自动处理多通道图像或单通道图像b.Various pixel types自动处理多型号位深的图像c.Arbitrarily-shaped region of interest 任意形状的感兴趣区域Øimage tuples in Halcon例如:如果想对一批图像进行滤波处理,你只需要调用一次mean_image 算子对图像数组进行操作,避免多次调用mean_image 。

MFC与Halcon联合编程环境配置

MFC与Halcon联合编程环境配置

MFC&HALCON开发环境配置
本文写下MFC调用HALCON开发环境的配置。

本文基于:VS2013 HALCON12
1)首先建立一个基于对话框的MFC工程
2)生成-> 配置管理器如果是64位的操作系统解决方案平台一定要变为x64
3)视图-> 属性管理器可以发现在属性管理器中多了x64两个文件夹,以Debug为例,双击Debug中的er
进行属性配置,本文HALCON安装位置为C:\Program
Files\MVTec\HALCON-12.0,各位按自己情况更改,换到自己安装目录即可。

①VC++ 包含目录加入
C:\Program Files\MVTec\HALCON-12.0\include
C:\Program Files\MVTec\HALCON-12.0\include\cpp
C:\Program Files\MVTec\HALCON-12.0\include\halconcpp
②VC++ 库目录加入
C:\Program Files\MVTec\HALCON-12.0\lib\x64-win64
③C/C++ -> 常规附加包含目录加入
C:\Program Files\MVTec\HALCON-12.0\include
C:\Program Files\MVTec\HALCON-12.0\include\halconcpp
④链接器-> 常规-> 附加库目录加入
C:\Program Files\MVTec\HALCON-12.0\lib\x64-win64
⑤链接器-> 输入-> 附加依赖项加入
halconcpp.lib
至此vs2013配置完成。

halcon+VC6.0混合编程

halcon+VC6.0混合编程

Halcon与MFC混合编程(图文教程) 一.新建工程
打开VC6.0 -- >新建工程-- >MFC AppWizard (exe)
选择类型:Dialog based -- > Finish
二 .把Halcon安装目录下lib、include文件夹复制到新建的工程目录下的halcon新文件夹中
三.配置halcon
打开VC6.0 -- > Project -- > Setting
1.C/C++ 设置
Category选Preprocessor,
路径选halcon\include,halcon\include\cpp(英文的“,”隔开)
2.Link设置
Cartegory选input
包含文件为halcon.lib halconcpp10.lib(中间用空格隔开)
路径为halcon\lib\x86sse2-win32
Cartegory选General
把Debug改为bin
到此配置完成,可以点OK了
四.在程序添加代码
1.类CMay-App中添加头文件
#include "halconcpp.h"
using namespace Halcon;
2.在类CMy-Dlg中添加变量初始化语句public:
Hobject m_Image;
HTuple m_hWindowHandle; Hobject m_objDisp;
3.在OnInitDialog()中添加对话框按键语句
对话框右键属性,ID改为VIEW,如下图所示
双击对话框或按键,在TODO下面添加相应的语句即可。

halcon 函数 中文说明

halcon 函数 中文说明

halcon 函数中文说明
Halcon 是一种计算机视觉库,提供了丰富的函数来进行图像处理和分析。

以下是一些常见的 Halcon 函数及其中文说明:
1. read_image:读取图像文件。

2. write_image:将图像数据写入文件。

3. rgb_to_gray:将 RGB 图像转换为灰度图像。

4. threshold:进行图像二值化处理。

5. reduce_domain:将图像限制在指定的区域内。

6. crop_rectangle:裁剪图像的矩形区域。

7. find_shape_model:在图像中查找指定形状的模板。

8. affine_trans_image:对图像进行仿射变换。

9. gen_circle_contour_xld:生成圆形轮廓。

10. intersection_lines:计算两条直线的交点。

以上只是 Halcon 库中的一小部分函数,它还提供了许多其他的函数和工具,用于各种图像处理和计算机视觉任务。

halcon meanimage c 用法 示例

halcon meanimage c 用法 示例

文章标题:深度解析Halcon MeanImage C的用法和示例一、引言在计算机视觉领域,Halcon是一款非常强大的工具,其中的MeanImage C是其重要的功能之一。

本文将深度解析Halcon MeanImage C的用法和示例,通过实际案例分析,帮助读者更好地理解和应用这一功能。

二、MeanImage C的作用和原理MeanImage C是Halcon中用于计算图像均值的函数,它将图像中的每个像素设置为其邻域内像素的均值。

通过对图像进行均值化处理,可以减小图像中的噪声,使得图像更加清晰。

三、MeanImage C的用法1. 函数原型MeanImage (Image : MeanImage, Width, Height)2. 参数说明- Image:输入的图像- MeanImage:输出的均值化后的图像- Width:均值化窗口的宽度- Height:均值化窗口的高度3. 示例(1)加载原始图像read_image (Image, 'example.jpg')(2)进行均值化处理MeanImage (Image, MeanImage, 3, 3)四、实际案例分析以一张包含噪声的图像为例,我们将通过Halcon中的MeanImage C 函数来进行均值化处理,以观察其效果。

加载原始图像:read_image (Image, 'example.jpg')进行均值化处理:MeanImage (Image, MeanImage, 3, 3)经过处理后的图像,噪声显著减小,图像变得更加清晰,轮廓更加鲜明。

五、个人观点和理解在实际的图像处理过程中,MeanImage C函数可以大大改善图像质量,特别是在处理包含噪声的图像时效果更为明显。

通过合理设置均值化窗口的大小,可以灵活应用于不同场景下的图像处理需求。

六、总结本文深度解析了Halcon MeanImage C的用法和示例,通过实际案例分析,帮助读者更好地理解和应用这一功能。

halcon meanimage c 用法 示例

halcon meanimage c 用法 示例

halcon meanimage c 用法示例摘要:1.简介:Halcon Meanimage C 算法介绍2.算法原理:Meanimage 算法概述3.参数设置:Meanimage 算法关键参数解析4.示例解析:Halcon Meanimage C 用法实例5.总结:Halcon Meanimage C 算法应用与优势正文:【简介】Halcon Meanimage C 算法是哈工大机器视觉团队开发的一种图像处理算法,主要用于图像降噪和增强。

该算法基于均值滤波思想,可以有效地消除图像中的噪声,同时保留图像细节。

在我国智能制造和工业自动化领域,该算法具有广泛的应用前景。

【算法原理】Meanimage 算法是一种基于图像局部区域的平均处理方法。

其主要思想是在一定范围内的邻域内计算图像像素的平均值,以达到降噪和增强的目的。

在这个过程中,可以通过设置不同的参数来调整算法的性能,例如邻域大小、迭代次数等。

【参数设置】1.邻域大小(Neighborhood Size):决定均值计算的范围。

适当减小邻域大小可以更好地保留图像细节,但降噪效果会减弱;增大邻域大小可以提高降噪效果,但可能导致图像边缘模糊。

2.迭代次数(Iterations):决定算法执行的次数。

增加迭代次数可以提高算法的收敛速度,但过多次的迭代可能导致图像过度平滑,失去细节。

3.阈值(Threshold):用于判断像素值是否发生变化。

设置合适的阈值可以避免过度平滑现象,同时提高算法的稳定性。

【示例解析】以下是一个使用Halcon Meanimage C 算法的示例:1.读取原始图像:使用Halcon的读取函数读取一张包含噪声的图像。

2.初始化参数:设置邻域大小、迭代次数和阈值等参数。

3.应用Meanimage 算法:使用Halcon Meanimage C 函数对图像进行处理。

4.显示结果:使用Halcon的显示函数对比原始图像和处理后的图像。

【总结】Halcon Meanimage C 算法在图像降噪和增强方面具有较好的性能,通过合理设置参数,可以有效地消除图像噪声,同时保留图像细节。

MFC调用HALCON实现相机采图和图像显示

MFC调用HALCON实现相机采图和图像显示

MFC调用HALCON实现相机采图和图像显示一、相机采图1、查询设备信息HTuple Information, Values;info_framegrabber("GigEVision", "device", &Information, &Values);Information用来获取相机信息Values用来获取相机名称2、打开相机HTuple m_hFrameGrabber; //相机句柄open_framegrabber("GigEVision",0,0,0,0,0,0,"progressive",-1,"default",-1,"false","default",Values[0],0,-1,&m_hFrameGrabber);打开第二个相机open_framegrabber("GigEVision",0,0,0,0,0,0,"progressive",-1,"default",-1,"false","default",Values[1],0,-1,&m_hFrameGrabber);注意相机名的调用方法。

3、获取相机参数HTuple m_ImageWidth;get_framegrabber_param(m_hFrameGrabber,"m_ImageWidt h",&m_ImageWidth);4、单帧抓取Hobject * pImage; //图片指针grab_image(pImage,m_hFrameGrabber);由于grab_image函数不能中断执行,因此在多线程中调用时,需要注意对它的原子保护。

Halcon结合C#二次开发读取图片并处理图片

Halcon结合C#二次开发读取图片并处理图片

Halcon结合C#二次开发读取图片并处理图片在Halcon12.0中的程序编辑器编辑程序:read_image(Image,'E:/Tulips.jpg')get_image_size(Image,Width,Height)rgb1_to_gray(Image,GrayImage)文件——导出打开VS2010 新建项目名称WindowsFormsHalcon——确定右键WindowsFormsHalcon——属性更改目标框架为.NET Framework4然后在“生成”选项下更改目标平台为Any CPU(其他均不用修改)在工具箱栏右键——选择项halcondotnet.dll——打开出现如下界面——确定在工具箱中出现控件HWindowControl在Form1窗体中拖入控件HWindowControl,两个Button按钮控件,OpenFileDialog控件在VS2010中打开之前导出的Halcon程序,修改程序后写入窗体程序如下:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using HalconDotNet; //添加引用HalconDotNetnamespace WindowsFormsHalcon{public partial class Form1 : Form{HDevelopExport HD = new HDevelopExport(); //添加代码string ImagePath;public Form1(){InitializeComponent();this.btnHandle.Enabled = false; //添加代码,读取图片前处理图片按钮是不可用的}//读取图片按钮操作private void btnRead_Click_1(object sender, EventArgs e){openFileDialog1.Filter = "JPEG文??件tt|*.jpg*|BMP文??件tt|*.bmp*|TIFF文??件tt|*.tiff*";openFileDialog1.RestoreDirectory = true;openFileDialog1.FilterIndex = 1; //设置对话框属性if (openFileDialog1.ShowDialog() == DialogResult.OK){ImagePath = openFileDialog1.FileName;HD.ReadImage(hWindowControl1.HalconWindow, ImagePath); // void HDevelopExport.ReadImage(Htuple Window,string path)this.btnHandle.Enabled = true; //读取图片后处理图片按钮可用}}//处理图片按钮操作private void btnHandle_Click_1(object sender, EventArgs e){HD.ImagePro();this.btnHandle.Enabled = false; //处理图片后处理图片按钮不可用}}public partial class HDevelopExport{public HTuple hv_ExpDefaultWinHandle; //Htuple--Halcon tuple,tuple是Halcon特有的数据结构,可用于图形和控制变量,是与外界程序数据交互的通道HObject ho_Image, ho_GrayImage;// Main procedurepublic void InitHalcon(){// Default settings used in HDevelopHOperatorSet.SetSystem("do_low_error", "false");}//读取图片public void ReadImage(HTuple Window, string path){hv_ExpDefaultWinHandle = Window;HOperatorSet.GenEmptyObj(out ho_Image);//创建一个空的tuple对象ho_Image.Dispose();HOperatorSet.ReadImage(out ho_Image, path);HOperatorSet.DispObj(ho_Image, hv_ExpDefaultWinHandle);}//处理图片public void ImagePro(){HOperatorSet.Rgb1ToGray(ho_Image, out ho_GrayImage);HOperatorSet.DispObj(ho_GrayImage, hv_ExpDefaultWinHandle);ho_GrayImage.Dispose();}}}程序运行后点击“读取图片”选择图片路径出现如下界面:点击“打开”点击“处理图片”。

Halcon和C#联合编程-图像变量的相互转换(HObject、HImage、Bitmap)

Halcon和C#联合编程-图像变量的相互转换(HObject、HImage、Bitmap)

Halcon和C#联合编程-图像变量的相互转换(HObject、HImage、Bitmap)/// <summary>/// 灰度图像 HObject -> Bitmap/// </summary>public static Bitmap HObject2Bitmap(HObject ho){try{HTuple type, width, height, pointer;//HOperatorSet.AccessChannel(ho, out ho, 1);HOperatorSet.GetImagePointer1(ho, out pointer, out type, out width, out height);//himg.GetImagePointer1(out type, out width, out height);Bitmap bmp = new Bitmap(width.I, height.I, PixelFormat.Format8bppIndexed);ColorPalette pal = bmp.Palette;for (int i = 0; i <= 255; i++){pal.Entries[i] = Color.FromArgb(255, i, i, i);}bmp.Palette = pal;BitmapData bitmapData = bmp.LockBits(new Rectangle(0, 0, width, height), ImageLockMode.WriteOnly, PixelFormat.Format8bppIndexed);int PixelSize = Bitmap.GetPixelFormatSize(bitmapData.PixelFormat) / 8;int stride = bitmapData.Stride;int ptr = bitmapData.Scan0.ToInt32();for (int i = 0; i < height; i++){CopyMemory(ptr, pointer, width * PixelSize);pointer += width;ptr += bitmapData.Stride;}bmp.UnlockBits(bitmapData);return bmp;}catch (Exception exc){return null;}}/// <summary>/// 灰度图像 HObject -> HImage1/// </summary>public HImage HObject2HImage1(HObject hObj){HImage image = new HImage();HTuple type, width, height, pointer;HOperatorSet.GetImagePointer1(hObj, out pointer,out type, out width, out height);image.GenImage1(type, width, height, pointer);return image;}/// <summary>/// 彩⾊图像 HObject -> HImage3/// </summary>public HImage HObject2HImage3(HObject hObj){HImage image = new HImage();HTuple type, width, height, pointerRed, pointerGreen, pointerBlue;HOperatorSet.GetImagePointer3(hObj, out pointerRed, out pointerGreen, out pointerBlue,out type, out width, out height);image.GenImage3(type, width, height, pointerRed, pointerGreen, pointerBlue);return image;}。

利用halcon进行图像拼接的基本教程

利用halcon进行图像拼接的基本教程

一、什么是图像拼接(略)二、拼接的基本过程使用halcon自带的例子来说明这个过程打开拼接下面的mosaicking.hdv(一)镜头校正CamParam := [0.0121693,-2675.63,7.40046e-006,7.4e-006,290.491,258.887,640,480] change_radial_distortion_cam_par ('adaptive', CamParam, 0, CamParOut)(二)获得图像* Read in the images and show them one-by-one.for J := 1 to 10 by 1read_image (Image, ImgPath+ImgName+J$'02')if (EliminateRadialDistortions)change_radial_distortion_image (Image, Image, Image, CamParam, CamParOut)endifconcat_obj (Images, Image, Images)dev_display (Image)disp_message (WindowHandle1, 'Image '+J$'d', 'window', -1, -1, 'green', 'false')wait_seconds (0.5)endfor(三)图像配准tile_images_offset (Images, TiledImage, [0,0,0,0,0,500,500,500,500,500],[0,660,1320,1980,2640,0,660,1320,1980,2640], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], [-1,-1,-1,-1,-1,-1,-1,-1,-1,-1], 3280, 980)(四)图像拼接,获得全军图像gen_projective_mosaic (Images, MosaicImage, StartImage, From, To, ProjMatrices, StackingOrder,'false', MosaicMatrices2D)除了镜头校正以外,其他几个函数在拼接中是常见的,通过查看帮助获得了解。

halconC#使用pictureBox显示halcon图像

halconC#使用pictureBox显示halcon图像

halconC#使⽤pictureBox显⽰halcon图像halcon C#pictureBoxhalcon在.net⾥⾯⾃带的控件可以实现交互等很多强⼤的功能,但是界⾯并不是很好看,⽽且显⽰图像的速度⽐较慢,如果希望实现缩放和拖动的话,就显得不是⾜够流畅了.总之,由于各种原因,希望在pictureBox显⽰halcon处理的图像.好了,废话不多说.先上图可以显⽰,实现交互.其它功能请各位⾃⾏测试.现在说说⽅法.HTuple a, b, c,WindowHandle;HObject circle;private void button1_Click(object sender, EventArgs e){HObject img;HTuple width, height;//width,height显⽰整个图像,类似与setpartHOperatorSet.ReadImage(out img, @"C:\Users\Administrator\Desktop\a.jpg");HOperatorSet.GetImageSize(img, out width, out height);//pictureBox1.Handle,获取pictureBox1的句柄HOperatorSet.OpenWindow(0, 0, width, height, pictureBox1.Handle, "visible", "", out WindowHandle);HOperatorSet.DispObj(img, WindowHandle);HOperatorSet.WriteString(WindowHandle, "测试成功");}//交互测试private void button2_Click(object sender, EventArgs e){HOperatorSet.DrawCircle(WindowHandle, out a, out b, out c);HOperatorSet.GenCircle(out circle, a, b, c);}更多 0 分享到:相关课程推荐:.NET平台和C#编程从⼊门到精通C#.NET_⾯向对象编程技术使⽤C#开发信息管理系统疯狂的 C#——快速⼊门。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档