【涡旋光检测MFC】

本文档详细介绍了如何配置VS2015、Halcon13和HuaTengVersion环境以进行涡旋光检测。首先,介绍了安装路径和配置过程,包括VS2015的VC++目录和链接器设置,以及Halcon和HuaTengVersion的库和插件安装。接着,概述了MFC程序的结构,包括主窗体、系统初始化和涡旋光检测的相关源文件。最后,强调了halcon端的接口选择和参数调节,以及如何将检测程序整合到MFC应用中。
摘要由CSDN通过智能技术生成

环境配置

先后安装VS2015,Halcon13,HuaTengVersion
我的安装路径是:
1.D:\softwares\vs15
2.D:\softwares\halcon
3.D:\softwares\HuaTengVision
配置时一定一定注意和自己路径匹配!!!

VS2015配置

项目属性–>常规
在这里插入图片描述
VC++目录–>包含目录:D:\softwares\halcon\include\cpp;D:\softwares\halcon\include\halconcpp;D:\softwares\halcon\include;

VC++目录–>库目录:D:\softwares\halcon\lib\x86sse2-win32;
在这里插入图片描述
C/C+±->常规–>附加包含目录:C:\Users\GHOST\Desktop\小任务\震荡级加工程序\ShockLevel\Include;D:\softwares\halcon\include;D:\softwares\halcon\include\halconcpp;
在这里插入图片描述
C/C+±->代码生成–>运行库
在这里插入图片描述
链接器–>附加库目录:D:\softwares\halcon\lib\x86sse2-win32;
在这里插入图片描述

链接器–>输入–>附加依赖项:halconcpp.lib;
在这里插入图片描述
把绘图相关库扔到相应位置
在这里插入图片描述

HuaTengVersion配置

==安装好halcon后点击下图文件夹中SetUp.exe安装相关插件
在这里插入图片描述

Halcon13配置

将下图框选的动态链接库复制进D:\softwares\halcon\bin\x86sse2-win32下

在这里插入图片描述
将下图框选文件复制进D:\softwares\halcon\lib\x86sse2-win32
在这里插入图片描述
打开halcon,注意接口选择(HuaTengVersion),连接后方可修改参数。
在这里插入图片描述
halcon端程序,结合可视化窗口及变量区调节视频流灰度梯度阈值

* Image Acquisition 01: Attention: The initialization may fail in case parameters need to
* Image Acquisition 01: be set in a specific order (e.g., image resolution vs. offset).
open_framegrabber ('HuaTengVision13', 1, 1, 0, 0, 0, 0, 'progressive', 8, 'Gray', -1, 'false', 'auto', 'Camera HT-SUA134GM#0003-0016', 0, -1, AcqHandle)

* Image Acquisition 01: Code generated by Image Acquisition 01
* open_framegrabber ('DirectFile', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'C:/Users/GHOST/Desktop/testavi_01.avi', 'default', -1, -1, AcqHandle)

grab_image_start (AcqHandle, -1)
i :=1
area := 0
startFlagPos := 1
count := 1
while (true)
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
    binary_threshold (Image, Region, 'max_separability', 'light', UsedThreshold1)
    * opening_circle (Region, RegionOpening, 5)
    * closing_circle (RegionOpening, RegionClosing, 5)
    area_1 := area
    area_center (Region, Area, Row, Column)
    area := Area
         if ((area > 5000 and area <100000) and (area_1 < 5000 or area_1 > 100000))
             startFlagPos := i
         endif
         if(i == (startFlagPos + 5))
             * 获取图片整个区域
             get_domain (Image, Domain)
             * 取得图片平均灰度Mean
             intensity (Domain, Image, Mean, Deviation) 
             * 获取图像大小
             get_image_pointer1 (Image, Pointer, Type, Width, Height)
             * 获取图像总灰度
             grayVal := Mean * Width * Height
             filename := 'C:/Users/GHOST/Desktop/catch/'+count+'grayVal' + grayVal +'.png'
             write_image (Image, 'png', 0, filename)
             count := count + 1
         endif
    * 获取开闭后连通的区域
    * connection (RegionClosing, Region)
    * 获取开闭后连通的区域数量
    * count_obj (Region, Number)
    
    i := i+1
endwhile
close_framegrabber (AcqHandle)

导出,生成c++程序,将Action代码块中程序嵌入到mfc中

MFC程序

主窗体

在这里插入图片描述

主体.h


// ShockLevel.h : PROJECT_NAME 应用程序的主头文件
//

#pragma once

#ifndef __AFXWIN_H__
	#error "在包含此文件之前包含“stdafx.h”以生成 PCH 文件"
#endif

#include "resource.h"		// 主符号


// CShockLevelApp: 
// 有关此类的实现,请参阅 ShockLevel.cpp
//

class CShockLevelApp : public CWinApp
{
   
public:
	CShockLevelApp();

// 重写
public:
	virtual BOOL InitInstance();

// 实现

	DECLARE_MESSAGE_MAP()
};

extern CShockLevelApp theApp;

主体.cpp


// ShockLevel.cpp : 定义应用程序的类行为。
//

#include "stdafx.h"
#include "ShockLevel.h"
#include "ShockLevelDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CShockLevelApp

BEGIN_MESSAGE_MAP(CShockLevelApp, CWinApp)
	ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()


// CShockLevelApp 构造

CShockLevelApp::CShockLevelApp()
{
   
	// 支持重新启动管理器
	m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;

	// TODO: 在此处添加构造代码,
	// 将所有重要的初始化放置在 InitInstance 中
}


// 唯一的一个 CShockLevelApp 对象

CShockLevelApp theApp;


// CShockLevelApp 初始化

BOOL CShockLevelApp::InitInstance()
{
   
	// 如果一个运行在 Windows XP 上的应用程序清单指定要
	// 使用 ComCtl32.dll 版本 6 或更高版本来启用可视化方式,
	//则需要 InitCommonControlsEx()。  否则,将无法创建窗口。
	INITCOMMONCONTROLSEX InitCtrls;
	InitCtrls.dwSize = sizeof(InitCtrls);
	// 将它设置为包括所有要在应用程序中使用的
	// 公共控件类。
	InitCtrls.dwICC = ICC_WIN95_CLASSES;
	InitCommonControlsEx(&InitCtrls);

	CWinApp::InitInstance();


	AfxEnableControlContainer();

	// 创建 shell 管理器,以防对话框包含
	// 任何 shell 树视图控件或 shell 列表视图控件。
	CShellManager *pShellManager = new CShellManager;

	// 激活“Windows Native”视觉管理器,以便在 MFC 控件中启用主题
	CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));

	// 标准初始化
	// 如果未使用这些功能并希望减小
	// 最终可执行文件的大小,则应移除下列
	// 不需要的特定初始化例程
	// 更改用于存储设置的注册表项
	// TODO: 应适当修改该字符串,
	// 例如修改为公司或组织名
	SetRegistryKey(_T("应用程序向导生成的本地应用程序"));

	CShockLevelDlg dlg;
	m_pMainWnd = &dlg;
	INT_PTR nResponse = dlg.DoModal();
	if (nResponse == IDOK)
	{
   
		// TODO: 在此放置处理何时用
		//  “确定”来关闭对话框的代码
	}
	else if (nResponse == IDCANCEL)
	{
   
		// TODO: 在此放置处理何时用
		//  “取消”来关闭对话框的代码
	}
	else if (nResponse == -1)
	{
   
		TRACE(traceAppMsg, 0, "警告: 对话框创建失败,应用程序将意外终止。\n");
		TRACE(traceAppMsg, 0, "警告: 如果您在对话框上使用 MFC 控件,则无法 #define _AFX_NO_MFC_CONTROLS_IN_DIALOGS。\n");
	}

	// 删除上面创建的 shell 管理器。
	if (pShellManager != NULL)
	{
   
		delete pShellManager;
	}

#ifndef _AFXDLL
	ControlBarCleanUp();
#endif

	// 由于对话框已关闭,所以将返回 FALSE 以便退出应用程序,
	//  而不是启动应用程序的消息泵。
	return FALSE;
}


主窗口.h


// ShockLevelDlg.h : 头文件
//

#pragma once
#include "TabSheet.h"
#include "InitSystem.h"
#include "Vortex.h"
#include "afxwin.h"

// CShockLevelDlg 对话框
class CShockLevelDlg : public CDialogEx
{
   
// 构造
public:
	CShockLevelDlg(CWnd* pParent = NULL);	// 标准构造函数

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_SHOCKLEVEL_DIALOG };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// DDX/DDV 支持


// 实现
protected:
	HICON m_hIcon;

	// 生成的消息映射函数
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	
	DECLARE_MESSAGE_MAP()
public:
	CTabSheet mTab;//声明标签页控件
	CInitSystem digInitSystem; //系统初始化标签页对象
	CVortex digVortex;//涡旋光检测标签页对象
	
};

主窗口.cpp


// ShockLevelDlg.cpp : 实现文件
//

#include "stdafx.h"
#include "ShockLevel.h"
#include "ShockLevelDlg.h"
#include "afxdialogex.h"
#include "InitSystem.h"
#include "Vortex.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// 用于应用程序“关于”菜单项的 CAboutDlg 对话框

class CAboutDlg : public CDialogEx
{
   
public:
	CAboutDlg();

// 对话框数据
#ifdef AFX_DESIGN_TIME
	enum {
    IDD = IDD_ABOUTBOX };
#endif

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV 支持

// 实现
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
   
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
   
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// CShockLevelDlg 对话框



CShockLevelDlg::CShockLevelDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(IDD_SHOCKLEVEL_DIALOG, pParent)
{
   
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CShockLevelDlg::DoDataExchange(CDataExchange* pDX)
{
   
	CDialogEx::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB1, mTab);
	
}

BEGIN_MESSAGE_MAP(CShockLevelDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
END_MESSAGE_MAP()


// CShockLevelDlg 消息处理程序

BOOL CShockLevelDlg::OnInitDialog()
{
   
	CDialogEx::OnInitDialog();

	// 将“关于...”菜单项添加到系统菜单中。

	// IDM_ABOUTBOX 必须在系统命令范围内。
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
   
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
   
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// 设置此对话框的图标。  当应用程序主窗口不是对话框时,框架将自动
	//  执行此操作
	SetIcon(m_hIcon, TRUE);			// 设置大图标
	SetIcon(m_hIcon, FALSE);		// 设置小图标

	// TODO: 在此添加额外的初始化代码
	//添加标签页
	mTab.AddPage<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值