From 6ba20a51d17d6be2cf9886f3622863e95c2994fb Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期三, 13 八月 2025 19:57:17 +0800
Subject: [PATCH] 1. 添加侧面检的视觉库
---
VisionMeasure/VisionMeasureClass.h | 48 ++++
VisionMeasure/VisionMeasure.vcxproj | 199 ++++++++++++++++
VisionMeasure/stdafx.h | 16 +
VisionMeasure/VisionMeasureClass.cpp | 143 +++++++++++
VisionMeasure/VisionMeasure.vcxproj.filters | 57 ++++
VisionMeasure/VisionMeasure.cpp | 6
VisionMeasure/BaseProcApi.cpp | 106 ++++++++
VisionMeasure/ReadMe.txt | 32 ++
SDK/VisionMeasure/include/VisionMeasureClass.h | 48 ++++
VisionMeasure/BaseProcApi.h | 12 +
VisionMeasure/targetver.h | 8
VisionMeasure/stdafx.cpp | 8
VisionMeasure/dllmain.cpp | 19 +
13 files changed, 702 insertions(+), 0 deletions(-)
diff --git a/SDK/VisionMeasure/include/VisionMeasureClass.h b/SDK/VisionMeasure/include/VisionMeasureClass.h
new file mode 100644
index 0000000..3c147f5
--- /dev/null
+++ b/SDK/VisionMeasure/include/VisionMeasureClass.h
@@ -0,0 +1,48 @@
+#ifndef __VISIONMEASURECLASS_H__
+#define __VISIONMEASURECLASS_H__
+
+#include <iostream>
+#include <string>
+#include <stdio.h>
+
+#ifdef VISIONMEASURE_EXPORTS
+#define EXPORT_MEASURE_EXPORTS _declspec(dllexport)
+#else
+#define EXPORT_MEASURE_EXPORTS _declspec(dllimport)
+#endif
+
+typedef struct _MeasurePoint {
+ double x;
+ double y;
+ double cy;
+}MeasurePoint, *PMeasurePoint;
+
+class EXPORT_MEASURE_EXPORTS CVisionMeasureClass
+{
+public:
+ CVisionMeasureClass();
+ ~CVisionMeasureClass();
+
+public:
+ //1. 获取版本号
+ std::string getVersion(void);
+
+ //2. 测量点
+ int doMeasurePos(unsigned char*img, int width, int height, double x1, double y1, double x2, double y2, double len, int threshold, double *xOutResult, double *yOutResult, double *cyOutResult, double *distOutResult, int &nOutResult);
+
+ //3. 测量点
+ int doMeasurePosA(unsigned char* img, int width, int height, double sigma,
+ MeasurePoint *measureResult1, int &outResult1,
+ MeasurePoint* measureResult2, int& outResult2,
+ MeasurePoint* measureResult3, int& outResult3,
+ MeasurePoint* measureResult4, int& outResult4,
+ MeasurePoint* measureResult5, int& outResult5,
+ MeasurePoint* measureResult6, int& outResult6,
+ MeasurePoint* measureResult7, int& outResult7);
+
+ //1. 获取程序运行路径
+ std::string GetAppPathA(void);
+};
+
+#endif // __VISIONMEASURECLASS_H__
+
diff --git a/VisionMeasure/BaseProcApi.cpp b/VisionMeasure/BaseProcApi.cpp
new file mode 100644
index 0000000..7d6c83a
--- /dev/null
+++ b/VisionMeasure/BaseProcApi.cpp
@@ -0,0 +1,106 @@
+#include "stdafx.h"
+#include "BaseProcApi.h"
+
+//对象是否存在
+bool ObjectIsExist(HalconCpp::HObject& hObject) {
+ /* code */
+ // 判断hObject是否未初始化
+ if (!hObject.IsInitialized()) return false;
+
+ // 创建一个空的HObject
+ HalconCpp::HObject hEmptyObj;
+ HalconCpp::GenEmptyObj(&hEmptyObj);
+ // 判断hObject是否等于hEmptyObj
+ if (hObject == hEmptyObj) return false;
+
+ // 否则返回true
+ return true;
+}
+
+bool GetImageSizeApi(HalconCpp::HObject hImage, int& width, int& height) {
+ /*c ode */
+ if (!ObjectIsExist(hImage)) return false;
+
+ HalconCpp::HTuple hWidth, hHeight;
+ HalconCpp::GetImageSize(hImage, &hWidth, &hHeight);
+ width = hWidth[0].I();
+ height = hHeight[0].I();
+ if (width < 1 || height < 1) return false;
+ return true;
+}
+
+int doMeasurePosApi(HalconCpp::HObject& hImage, double x1, double y1, double x2, double y2, double len, int threshold, double sigma, double* xOutResult, double* yOutResult, double* cyOutResult, double* distOutResult, int& nOutResult) {
+ /* code */
+ int width = 0;
+ int height = 0;
+ nOutResult = 0;
+ if (!GetImageSizeApi(hImage, width, height)) return -1;
+ if (width < 1 || height < 1) return -1;
+
+ // Local control variables
+ HalconCpp::HTuple hv_AmplitudeThreshold, hv_RoiWidthLen2;
+ HalconCpp::HTuple hv_LineRowStart_Measure_01_0, hv_LineColumnStart_Measure_01_0;
+ HalconCpp::HTuple hv_LineRowEnd_Measure_01_0, hv_LineColumnEnd_Measure_01_0;
+ HalconCpp::HTuple hv_TmpCtrl_Row, hv_TmpCtrl_Column, hv_TmpCtrl_Dr;
+ HalconCpp::HTuple hv_TmpCtrl_Dc, hv_TmpCtrl_Phi, hv_TmpCtrl_Len1;
+ HalconCpp::HTuple hv_TmpCtrl_Len2, hv_MsrHandle_Measure_01_0, hv_Row_Measure_01_0;
+ HalconCpp::HTuple hv_Column_Measure_01_0, hv_Amplitude_Measure_01_0;
+ HalconCpp::HTuple hv_Distance_Measure_01_0;
+
+ hv_AmplitudeThreshold = threshold;
+ hv_RoiWidthLen2 = len;
+
+ //Measure 01: Coordinates for line Measure 01 [0]
+ hv_LineRowStart_Measure_01_0 = y1;
+ hv_LineColumnStart_Measure_01_0 = x1;
+ hv_LineRowEnd_Measure_01_0 = y2;
+ hv_LineColumnEnd_Measure_01_0 = x2;
+
+ //Measure 01: Convert coordinates to rectangle2 type
+ hv_TmpCtrl_Row = 0.5 * (hv_LineRowStart_Measure_01_0 + hv_LineRowEnd_Measure_01_0);
+ hv_TmpCtrl_Column = 0.5 * (hv_LineColumnStart_Measure_01_0 + hv_LineColumnEnd_Measure_01_0);
+ hv_TmpCtrl_Dr = hv_LineRowStart_Measure_01_0 - hv_LineRowEnd_Measure_01_0;
+ hv_TmpCtrl_Dc = hv_LineColumnEnd_Measure_01_0 - hv_LineColumnStart_Measure_01_0;
+ hv_TmpCtrl_Phi = hv_TmpCtrl_Dr.TupleAtan2(hv_TmpCtrl_Dc);
+ hv_TmpCtrl_Len1 = 0.5 * (((hv_TmpCtrl_Dr * hv_TmpCtrl_Dr) + (hv_TmpCtrl_Dc * hv_TmpCtrl_Dc)).TupleSqrt());
+ hv_TmpCtrl_Len2 = hv_RoiWidthLen2;
+ double len1 = hv_TmpCtrl_Len1[0].D();
+ double len2 = hv_TmpCtrl_Len2[0].D();
+ printf("len1 = %f, len2 = %f\n", len1, len2);
+
+ //Measure 01: Create measure for line Measure 01 [0]
+ //Measure 01: Attention: This assumes all images have the same size!
+ HalconCpp::GenMeasureRectangle2(hv_TmpCtrl_Row, hv_TmpCtrl_Column, hv_TmpCtrl_Phi, hv_TmpCtrl_Len1,
+ hv_TmpCtrl_Len2, width, height, "nearest_neighbor", &hv_MsrHandle_Measure_01_0);
+ //Measure 01: ***************************************************************
+ //Measure 01: * The code which follows is to be executed once / measurement *
+ //Measure 01: ***************************************************************
+ //Measure 01: The image is assumed to be made available in the
+ //Measure 01: variable last displayed in the graphics window
+ //Measure 01: Execute measurements
+ HalconCpp::MeasurePos(hImage, hv_MsrHandle_Measure_01_0, sigma, hv_AmplitudeThreshold, "all",
+ "all", &hv_Row_Measure_01_0, &hv_Column_Measure_01_0, &hv_Amplitude_Measure_01_0,
+ &hv_Distance_Measure_01_0);
+ //Measure 01: Do something with the results
+ HalconCpp::CloseMeasure(hv_MsrHandle_Measure_01_0);
+
+ HalconCpp::HTuple hv_length = hv_Row_Measure_01_0.TupleLength();
+ int count = hv_length[0].I();
+ if (count > MEASURE_MAX_NUM) {
+ count = MEASURE_MAX_NUM;
+ }
+
+ for (int i = 0; i < count; i++) {
+ xOutResult[i] = hv_Column_Measure_01_0[i].D();
+ yOutResult[i] = hv_Row_Measure_01_0[i].D();
+ cyOutResult[i] = hv_Amplitude_Measure_01_0[i].D();
+ }
+ int num = count - 1;
+ for (int i = 0; i < num; i++) {
+ distOutResult[i] = hv_Distance_Measure_01_0[i].D();
+ }
+
+ nOutResult = count;
+
+ return 1;
+}
diff --git a/VisionMeasure/BaseProcApi.h b/VisionMeasure/BaseProcApi.h
new file mode 100644
index 0000000..58696a0
--- /dev/null
+++ b/VisionMeasure/BaseProcApi.h
@@ -0,0 +1,12 @@
+#ifndef BASEPROCAPI_H
+#define BASEPROCAPI_H
+
+#include <HalconCpp.h>
+
+#define VERSION_NO "1.0.0"
+#define MEASURE_MAX_NUM 100
+
+int doMeasurePosApi(HalconCpp::HObject& hImage, double x1, double y1, double x2, double y2, double len, int threshold, double sigma, double* xOutResult, double* yOutResult, double* cyOutResult, double* distOutResult, int& nOutResult);
+
+#endif
+
diff --git a/VisionMeasure/ReadMe.txt b/VisionMeasure/ReadMe.txt
new file mode 100644
index 0000000..587d090
--- /dev/null
+++ b/VisionMeasure/ReadMe.txt
@@ -0,0 +1,32 @@
+锘�========================================================================
+ 鍔ㄦ�侀摼鎺ュ簱锛歏isionMeasure 椤圭洰姒傝堪
+========================================================================
+
+搴旂敤绋嬪簭鍚戝宸蹭负鎮ㄥ垱寤轰簡姝� VisionMeasure DLL銆�
+
+鏈枃浠舵瑕佷粙缁嶇粍鎴� VisionMeasure 搴旂敤绋嬪簭鐨勬瘡涓枃浠剁殑鍐呭銆�
+
+
+VisionMeasure.vcxproj
+ 杩欐槸浣跨敤搴旂敤绋嬪簭鍚戝鐢熸垚鐨� VC++ 椤圭洰鐨勪富椤圭洰鏂囦欢锛屽叾涓寘鍚敓鎴愯鏂囦欢鐨� Visual C++ 鐨勭増鏈俊鎭紝浠ュ強鏈夊叧浣跨敤搴旂敤绋嬪簭鍚戝閫夋嫨鐨勫钩鍙般�侀厤缃拰椤圭洰鍔熻兘鐨勪俊鎭��
+
+VisionMeasure.vcxproj.filters
+ 杩欐槸浣跨敤鈥滃簲鐢ㄧ▼搴忓悜瀵尖�濈敓鎴愮殑 VC++ 椤圭洰绛涢�夊櫒鏂囦欢銆傚畠鍖呭惈鏈夊叧椤圭洰鏂囦欢涓庣瓫閫夊櫒涔嬮棿鐨勫叧鑱斾俊鎭�傚湪 IDE 涓紝閫氳繃杩欑鍏宠仈锛屽湪鐗瑰畾鑺傜偣涓嬩互鍒嗙粍褰㈠紡鏄剧ず鍏锋湁鐩镐技鎵╁睍鍚嶇殑鏂囦欢銆備緥濡傦紝鈥�.cpp鈥濇枃浠朵笌鈥滄簮鏂囦欢鈥濈瓫閫夊櫒鍏宠仈銆�
+
+VisionMeasure.cpp
+ 杩欐槸涓� DLL 婧愭枃浠躲��
+
+ 姝� DLL 鍦ㄥ垱寤烘椂涓嶅鍑轰换浣曠鍙枫�傚洜姝わ紝鐢熸垚鏃朵笉浼氫骇鐢� .lib 鏂囦欢銆傚鏋滃笇鏈涙椤圭洰鎴愪负鍏朵粬鏌愪釜椤圭洰鐨勯」鐩緷璧栭」锛屽垯闇�瑕佹坊鍔犱唬鐮佷互浠� DLL 瀵煎嚭鏌愪簺绗﹀彿锛屼互渚夸骇鐢熶竴涓鍑哄簱锛屾垨鑰咃紝涔熷彲浠ュ湪椤圭洰鈥滃睘鎬ч〉鈥濆璇濇涓殑鈥滈摼鎺ュ櫒鈥濇枃浠跺す涓紝灏嗏�滃父瑙勨�濆睘鎬ч〉涓婄殑鈥滃拷鐣ヨ緭鍏ュ簱鈥濆睘鎬ц缃负鈥滄槸鈥濄��
+
+/////////////////////////////////////////////////////////////////////////////
+鍏朵粬鏍囧噯鏂囦欢:
+
+StdAfx.h, StdAfx.cpp
+ 杩欎簺鏂囦欢鐢ㄤ簬鐢熸垚鍚嶄负 VisionMeasure.pch 鐨勯缂栬瘧澶� (PCH) 鏂囦欢鍜屽悕涓� StdAfx.obj 鐨勯缂栬瘧绫诲瀷鏂囦欢銆�
+
+/////////////////////////////////////////////////////////////////////////////
+鍏朵粬娉ㄩ噴:
+
+搴旂敤绋嬪簭鍚戝浣跨敤鈥淭ODO:鈥濇敞閲婃潵鎸囩ず搴旀坊鍔犳垨鑷畾涔夌殑婧愪唬鐮侀儴鍒嗐��
+
+/////////////////////////////////////////////////////////////////////////////
diff --git a/VisionMeasure/VisionMeasure.cpp b/VisionMeasure/VisionMeasure.cpp
new file mode 100644
index 0000000..a4bbcc5
--- /dev/null
+++ b/VisionMeasure/VisionMeasure.cpp
@@ -0,0 +1,6 @@
+// VisionMeasure.cpp : 定义 DLL 应用程序的导出函数。
+//
+
+#include "stdafx.h"
+
+
diff --git a/VisionMeasure/VisionMeasure.vcxproj b/VisionMeasure/VisionMeasure.vcxproj
new file mode 100644
index 0000000..0f807c6
--- /dev/null
+++ b/VisionMeasure/VisionMeasure.vcxproj
@@ -0,0 +1,199 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>{52480DCD-7CDE-4608-B432-1DF92C6F29D6}</ProjectGuid>
+ <Keyword>Win32Proj</Keyword>
+ <RootNamespace>VisionMeasure</RootNamespace>
+ <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>true</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseDebugLibraries>false</UseDebugLibraries>
+ <PlatformToolset>v140</PlatformToolset>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Label="Shared">
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <LinkIncremental>true</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <LinkIncremental>false</LinkIncremental>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;VISIONMEASURE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <ClCompile>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <Optimization>Disabled</Optimization>
+ <PreprocessorDefinitions>_DEBUG;_WINDOWS;_USRDLL;VISIONMEASURE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(HALCONROOT)\include\halconcpp;$(HALCONROOT)\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <AdditionalLibraryDirectories>$(HALCONROOT)\lib\$(HALCONARCH)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>halconcpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <PostBuildEvent>
+ <Command>copy "$(TargetDir)$(ProjectName).lib" "$(SolutionDir)VisionLib\lib\$(Configuration)\$(ProjectName).lib"
+copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)VisionLib\lib\$(Configuration)\$(ProjectName).dll"
+copy "$(TargetDir)$(ProjectName).pdb" "$(SolutionDir)VisionLib\lib\$(Configuration)\$(ProjectName).pdb"
+copy "$(SolutionDir)$(ProjectName)\VisionMeasureClass.h" "$(SolutionDir)VisionLib\include\VisionMeasureClass.h"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;VISIONMEASURE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <ClCompile>
+ <WarningLevel>Level3</WarningLevel>
+ <PrecompiledHeader>Use</PrecompiledHeader>
+ <Optimization>MaxSpeed</Optimization>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <IntrinsicFunctions>true</IntrinsicFunctions>
+ <PreprocessorDefinitions>NDEBUG;_WINDOWS;_USRDLL;VISIONMEASURE_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <SDLCheck>true</SDLCheck>
+ <AdditionalIncludeDirectories>$(HALCONROOT)\include\halconcpp;$(HALCONROOT)\include</AdditionalIncludeDirectories>
+ </ClCompile>
+ <Link>
+ <SubSystem>Windows</SubSystem>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <OptimizeReferences>true</OptimizeReferences>
+ <AdditionalLibraryDirectories>$(HALCONROOT)\lib\$(HALCONARCH)</AdditionalLibraryDirectories>
+ <AdditionalDependencies>halconcpp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ <PostBuildEvent>
+ <Command>copy "$(TargetDir)$(ProjectName).lib" "$(SolutionDir)SDK\VisionMeasure\lib\$(Configuration)\$(ProjectName).lib"
+copy "$(TargetDir)$(ProjectName).dll" "$(SolutionDir)SDK\VisionMeasure\lib\$(Configuration)\$(ProjectName).dll"
+copy "$(TargetDir)$(ProjectName).pdb" "$(SolutionDir)SDK\VisionMeasure\lib\$(Configuration)\$(ProjectName).pdb"
+copy "$(SolutionDir)$(ProjectName)\VisionMeasureClass.h" "$(SolutionDir)SDK\VisionMeasure\include\VisionMeasureClass.h"</Command>
+ </PostBuildEvent>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <Text Include="ReadMe.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="BaseProcApi.h" />
+ <ClInclude Include="stdafx.h" />
+ <ClInclude Include="targetver.h" />
+ <ClInclude Include="VisionMeasureClass.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="BaseProcApi.cpp" />
+ <ClCompile Include="dllmain.cpp">
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ </PrecompiledHeader>
+ <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ </PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="stdafx.cpp">
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
+ <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
+ </ClCompile>
+ <ClCompile Include="VisionMeasure.cpp" />
+ <ClCompile Include="VisionMeasureClass.cpp" />
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project>
\ No newline at end of file
diff --git a/VisionMeasure/VisionMeasure.vcxproj.filters b/VisionMeasure/VisionMeasure.vcxproj.filters
new file mode 100644
index 0000000..670f7d2
--- /dev/null
+++ b/VisionMeasure/VisionMeasure.vcxproj.filters
@@ -0,0 +1,57 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="婧愭枃浠�">
+ <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+ <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+ </Filter>
+ <Filter Include="澶存枃浠�">
+ <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+ <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+ </Filter>
+ <Filter Include="璧勬簮鏂囦欢">
+ <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+ <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+ </Filter>
+ <Filter Include="include">
+ <UniqueIdentifier>{24a6b585-160d-499d-9942-34dd0fc03439}</UniqueIdentifier>
+ </Filter>
+ <Filter Include="sdk">
+ <UniqueIdentifier>{fcd811cc-88b7-49b8-9003-fc8a96e0b2c1}</UniqueIdentifier>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <Text Include="ReadMe.txt" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="stdafx.h">
+ <Filter>澶存枃浠�</Filter>
+ </ClInclude>
+ <ClInclude Include="targetver.h">
+ <Filter>澶存枃浠�</Filter>
+ </ClInclude>
+ <ClInclude Include="BaseProcApi.h">
+ <Filter>include</Filter>
+ </ClInclude>
+ <ClInclude Include="VisionMeasureClass.h">
+ <Filter>sdk</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="stdafx.cpp">
+ <Filter>婧愭枃浠�</Filter>
+ </ClCompile>
+ <ClCompile Include="dllmain.cpp">
+ <Filter>婧愭枃浠�</Filter>
+ </ClCompile>
+ <ClCompile Include="VisionMeasureClass.cpp">
+ <Filter>include</Filter>
+ </ClCompile>
+ <ClCompile Include="BaseProcApi.cpp">
+ <Filter>include</Filter>
+ </ClCompile>
+ <ClCompile Include="VisionMeasure.cpp">
+ <Filter>婧愭枃浠�</Filter>
+ </ClCompile>
+ </ItemGroup>
+</Project>
\ No newline at end of file
diff --git a/VisionMeasure/VisionMeasureClass.cpp b/VisionMeasure/VisionMeasureClass.cpp
new file mode 100644
index 0000000..3bd964b
--- /dev/null
+++ b/VisionMeasure/VisionMeasureClass.cpp
@@ -0,0 +1,143 @@
+#include "stdafx.h"
+#include "VisionMeasureClass.h"
+#include "BaseProcApi.h"
+
+CVisionMeasureClass::CVisionMeasureClass() {
+ /* code */
+
+}
+
+CVisionMeasureClass::~CVisionMeasureClass() {
+ /* code */
+
+}
+
+std::string CVisionMeasureClass::getVersion(void) {
+ /* code */
+ return VERSION_NO;
+}
+
+int CVisionMeasureClass::doMeasurePos(unsigned char* img, int width, int height, double x1, double y1, double x2, double y2, double len, int threshold, double* xOutResult, double* yOutResult, double* cyOutResult, double* distOutResult, int& nOutResult) {
+ /* code */
+ if (nullptr == img) return -1;
+ if (width < 1 || height < 1) return -1;
+
+ try {
+ HalconCpp::HObject hImage;
+ HalconCpp::GenImage1(&hImage, "byte", width, height, (Hlong)img);
+
+ int nRet = doMeasurePosApi(hImage, x1, y1, x2, y2, len, threshold, 1.0f, xOutResult, yOutResult, cyOutResult, distOutResult, nOutResult);
+ hImage.Clear();
+ return nRet;
+ }
+ catch (...) {
+ return -1;
+ }
+
+}
+
+int CVisionMeasureClass::doMeasurePosA(unsigned char* img, int width, int height, double sigma,
+ MeasurePoint* measureResult1, int& outResult1,
+ MeasurePoint* measureResult2, int& outResult2,
+ MeasurePoint* measureResult3, int& outResult3,
+ MeasurePoint* measureResult4, int& outResult4,
+ MeasurePoint* measureResult5, int& outResult5,
+ MeasurePoint* measureResult6, int& outResult6,
+ MeasurePoint* measureResult7, int& outResult7) {
+ /* code */
+ if (nullptr == img) return -1;
+
+ HalconCpp::HObject hImage, hZoomImage, hMeanImage;
+ HalconCpp::GenImage1(&hImage, "byte", width, height, (Hlong)img);
+ int szHeight = (int)(0.5 * height);
+ HalconCpp::ZoomImageSize(hImage, &hZoomImage, width, szHeight, "constant");
+ HalconCpp::MeanImage(hZoomImage, &hMeanImage, 1, 5);
+
+
+ double xOutResult[MEASURE_MAX_NUM] = { 0 };
+ double yOutResult[MEASURE_MAX_NUM] = { 0 };
+ double cyOutResult[MEASURE_MAX_NUM] = { 0 };
+ double distOutResult[MEASURE_MAX_NUM] = { 0 };
+ int outNum = 0;
+
+ int topEdge = 15;
+ int botEdge = szHeight - 16;
+ int step = (int)((botEdge - topEdge) / 6);
+ int x1 = 5;
+ int x2 = width - 6;
+ for (int i = 0; i < 7; i++) {
+ int y1 = topEdge + i * step;
+ int y2 = y1;
+ int threshold = 10;
+ doMeasurePosApi(hMeanImage, x1, y1, x2, y2, 10, threshold, sigma, xOutResult, yOutResult, cyOutResult, distOutResult, outNum);
+ if (0 == i) {
+ outResult1 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult1[i].x = xOutResult[i];
+ measureResult1[i].y = 2 * yOutResult[i];
+ measureResult1[i].cy = cyOutResult[i];
+ }
+ }
+ else if (1 == i) {
+ outResult2 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult2[i].x = xOutResult[i];
+ measureResult2[i].y = 2 * yOutResult[i];
+ measureResult2[i].cy = cyOutResult[i];
+ }
+ }
+ else if (2 == i) {
+ outResult3 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult3[i].x = xOutResult[i];
+ measureResult3[i].y = 2 * yOutResult[i];
+ measureResult3[i].cy = cyOutResult[i];
+ }
+ }
+ else if (3 == i) {
+ outResult4 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult4[i].x = xOutResult[i];
+ measureResult4[i].y = 2 * yOutResult[i];
+ measureResult4[i].cy = cyOutResult[i];
+ }
+ }
+ else if (4 == i) {
+ outResult5 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult5[i].x = xOutResult[i];
+ measureResult5[i].y = 2 * yOutResult[i];
+ measureResult5[i].cy = cyOutResult[i];
+ }
+ }
+ else if (5 == i) {
+ outResult6 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult6[i].x = xOutResult[i];
+ measureResult6[i].y = 2 * yOutResult[i];
+ measureResult6[i].cy = cyOutResult[i];
+ }
+ }
+ else if (6 == i) {
+ outResult7 = outNum;
+ for (int i = 0; i < outNum; i++) {
+ measureResult7[i].x = xOutResult[i];
+ measureResult7[i].y = 2 * yOutResult[i];
+ measureResult7[i].cy = cyOutResult[i];
+ }
+ }
+ }
+
+ return 1;
+}
+
+std::string CVisionMeasureClass::GetAppPathA(void) {
+ /* code */
+ char szFilePath[MAX_PATH] = { 0 }, szDrive[MAX_PATH] = { 0 }, szDir[MAX_PATH] = { 0 }, szFileName[MAX_PATH] = { 0 }, szExt[MAX_PATH] = { 0 };
+ GetModuleFileNameA(NULL, szFilePath, sizeof(szFilePath));
+ _splitpath_s(szFilePath, szDrive, szDir, szFileName, szExt);
+
+ std::string str(szDrive);
+ str.append(szDir);
+ return str;
+}
\ No newline at end of file
diff --git a/VisionMeasure/VisionMeasureClass.h b/VisionMeasure/VisionMeasureClass.h
new file mode 100644
index 0000000..3c147f5
--- /dev/null
+++ b/VisionMeasure/VisionMeasureClass.h
@@ -0,0 +1,48 @@
+#ifndef __VISIONMEASURECLASS_H__
+#define __VISIONMEASURECLASS_H__
+
+#include <iostream>
+#include <string>
+#include <stdio.h>
+
+#ifdef VISIONMEASURE_EXPORTS
+#define EXPORT_MEASURE_EXPORTS _declspec(dllexport)
+#else
+#define EXPORT_MEASURE_EXPORTS _declspec(dllimport)
+#endif
+
+typedef struct _MeasurePoint {
+ double x;
+ double y;
+ double cy;
+}MeasurePoint, *PMeasurePoint;
+
+class EXPORT_MEASURE_EXPORTS CVisionMeasureClass
+{
+public:
+ CVisionMeasureClass();
+ ~CVisionMeasureClass();
+
+public:
+ //1. 获取版本号
+ std::string getVersion(void);
+
+ //2. 测量点
+ int doMeasurePos(unsigned char*img, int width, int height, double x1, double y1, double x2, double y2, double len, int threshold, double *xOutResult, double *yOutResult, double *cyOutResult, double *distOutResult, int &nOutResult);
+
+ //3. 测量点
+ int doMeasurePosA(unsigned char* img, int width, int height, double sigma,
+ MeasurePoint *measureResult1, int &outResult1,
+ MeasurePoint* measureResult2, int& outResult2,
+ MeasurePoint* measureResult3, int& outResult3,
+ MeasurePoint* measureResult4, int& outResult4,
+ MeasurePoint* measureResult5, int& outResult5,
+ MeasurePoint* measureResult6, int& outResult6,
+ MeasurePoint* measureResult7, int& outResult7);
+
+ //1. 获取程序运行路径
+ std::string GetAppPathA(void);
+};
+
+#endif // __VISIONMEASURECLASS_H__
+
diff --git a/VisionMeasure/dllmain.cpp b/VisionMeasure/dllmain.cpp
new file mode 100644
index 0000000..260abc6
--- /dev/null
+++ b/VisionMeasure/dllmain.cpp
@@ -0,0 +1,19 @@
+// dllmain.cpp : 定义 DLL 应用程序的入口点。
+#include "stdafx.h"
+
+BOOL APIENTRY DllMain( HMODULE hModule,
+ DWORD ul_reason_for_call,
+ LPVOID lpReserved
+ )
+{
+ switch (ul_reason_for_call)
+ {
+ case DLL_PROCESS_ATTACH:
+ case DLL_THREAD_ATTACH:
+ case DLL_THREAD_DETACH:
+ case DLL_PROCESS_DETACH:
+ break;
+ }
+ return TRUE;
+}
+
diff --git a/VisionMeasure/stdafx.cpp b/VisionMeasure/stdafx.cpp
new file mode 100644
index 0000000..6deea7e
--- /dev/null
+++ b/VisionMeasure/stdafx.cpp
@@ -0,0 +1,8 @@
+// stdafx.cpp : 只包括标准包含文件的源文件
+// VisionMeasure.pch 将作为预编译头
+// stdafx.obj 将包含预编译类型信息
+
+#include "stdafx.h"
+
+// TODO: 在 STDAFX.H 中引用任何所需的附加头文件,
+//而不是在此文件中引用
diff --git a/VisionMeasure/stdafx.h b/VisionMeasure/stdafx.h
new file mode 100644
index 0000000..93c8be7
--- /dev/null
+++ b/VisionMeasure/stdafx.h
@@ -0,0 +1,16 @@
+// stdafx.h : 标准系统包含文件的包含文件,
+// 或是经常使用但不常更改的
+// 特定于项目的包含文件
+//
+
+#pragma once
+
+#include "targetver.h"
+
+#define WIN32_LEAN_AND_MEAN // 从 Windows 头中排除极少使用的资料
+// Windows 头文件:
+#include <windows.h>
+
+
+
+// TODO: 在此处引用程序需要的其他头文件
diff --git a/VisionMeasure/targetver.h b/VisionMeasure/targetver.h
new file mode 100644
index 0000000..416cebf
--- /dev/null
+++ b/VisionMeasure/targetver.h
@@ -0,0 +1,8 @@
+#pragma once
+
+// 包括 SDKDDKVer.h 将定义可用的最高版本的 Windows 平台。
+
+// 如果要为以前的 Windows 平台生成应用程序,请包括 WinSDKVer.h,并将
+// 将 _WIN32_WINNT 宏设置为要支持的平台,然后再包括 SDKDDKVer.h。
+
+#include <SDKDDKVer.h>
--
Gitblit v1.9.3