Commit 17d157dc 张士柳

1 个父辈 30d336d2
......@@ -8,96 +8,8 @@
#include "eyemLib.h"
// Chain code:
// 7 0 1
// 6 2
// 5 4 3
#define CV_CHAINCODE_UP 0 ///< Up.
#define CV_CHAINCODE_UP_RIGHT 1 ///< Up and right.
#define CV_CHAINCODE_RIGHT 2 ///< Right.
#define CV_CHAINCODE_DOWN_RIGHT 3 ///< Down and right.
#define CV_CHAINCODE_DOWN 4 ///< Down.
#define CV_CHAINCODE_DOWN_LEFT 5 ///< Down and left.
#define CV_CHAINCODE_LEFT 6 ///< Left.
#define CV_CHAINCODE_UP_LEFT 7 ///< Up and left.
const char movesE[4][3][4] = { { { -1, -1, 3, CV_CHAINCODE_UP_LEFT },{ 0, -1, 0, CV_CHAINCODE_UP },{ 1, -1, 0, CV_CHAINCODE_UP_RIGHT } },
{ { 1, -1, 0, CV_CHAINCODE_UP_RIGHT },{ 1, 0, 1, CV_CHAINCODE_RIGHT },{ 1, 1, 1, CV_CHAINCODE_DOWN_RIGHT } },
{ { 1, 1, 1, CV_CHAINCODE_DOWN_RIGHT },{ 0, 1, 2, CV_CHAINCODE_DOWN },{ -1, 1, 2, CV_CHAINCODE_DOWN_LEFT } },
{ { -1, 1, 2, CV_CHAINCODE_DOWN_LEFT },{ -1, 0, 3, CV_CHAINCODE_LEFT },{ -1, -1, 3, CV_CHAINCODE_UP_LEFT } }
};
const char movesI[4][3][4] = { { { 1, -1, 3, CV_CHAINCODE_UP_RIGHT },{ 0, -1, 0, CV_CHAINCODE_UP },{ -1, -1, 0, CV_CHAINCODE_UP_LEFT } },
{ { -1, -1, 0, CV_CHAINCODE_UP_LEFT },{ -1, 0, 1, CV_CHAINCODE_LEFT },{ -1, 1, 1, CV_CHAINCODE_DOWN_LEFT } },
{ { -1, 1, 1, CV_CHAINCODE_DOWN_LEFT },{ 0, 1, 2, CV_CHAINCODE_DOWN },{ 1, 1, 2, CV_CHAINCODE_DOWN_RIGHT } },
{ { 1, 1, 2, CV_CHAINCODE_DOWN_RIGHT },{ 1, 0, 3, CV_CHAINCODE_RIGHT },{ 1, -1, 3, CV_CHAINCODE_UP_RIGHT } }
};
typedef unsigned int CvLabel;
const char cvChainCodeMoves[8][2] = {
{ 0, -1 },
{ 1, -1 },
{ 1, 0 },
{ 1, 1 },
{ 0, 1 },
{ -1, 1 },
{ -1, 0 },
{ -1, -1 }
};
typedef unsigned char CvChainCode;
typedef std::list<CvChainCode> CvChainCodes;
typedef struct {
cv::Point startingPoint;
CvChainCodes chainCode;
} CvContourChainCode;
typedef std::list<CvContourChainCode *> CvContoursChainCode;
typedef struct {
CvLabel label; //ǩ
union
{
unsigned int area; //(moment 00)
unsigned int m00; //Moment 00
};
unsigned int minx; // X min.
unsigned int maxx; // X max.
unsigned int miny; // Y min.
unsigned int maxy; // Y max.
cv::Point2d centroid; //
double m10; ///< Moment 10.
double m01; ///< Moment 01.
double m11; ///< Moment 11.
double m20; ///< Moment 20.
double m02; ///< Moment 02.
double u11; ///< Central moment 11.
double u20; ///< Central moment 20.
double u02; ///< Central moment 02.
double n11; ///< Normalized central moment 11.
double n20; ///< Normalized central moment 20.
double n02; ///< Normalized central moment 02.
double p1; ///< Hu moment 1.
double p2; ///< Hu moment 2.
CvContourChainCode contour; ///< Contour.
CvContoursChainCode internalContours; ///< Internal contours.
} CvBlob;
typedef std::map<CvLabel, CvBlob *> CvBlobs;
typedef std::pair<CvLabel, CvBlob *> CvLabelBlob;
typedef std::map<CvLabel, cv::Scalar> Palete;
/// \def _HSV2RGB_(H, S, V, R, G, B)
......@@ -136,25 +48,4 @@ typedef std::map<CvLabel, cv::Scalar> Palete;
} \
}
inline void cvReleaseBlobs(CvBlobs &blobs)
{
for (CvBlobs::iterator it = blobs.begin(); it != blobs.end(); ++it)
{
CvBlob *blob = (*it).second;
if (blob)
{
for (CvContoursChainCode::iterator jt = blob->internalContours.begin(); jt != blob->internalContours.end(); ++jt)
{
CvContourChainCode *contour = *jt;
if (contour)
delete contour;
}
blob->internalContours.clear();
delete blob;
}
}
blobs.clear();
}
#endif/* __EYEM_BIN_H */
\ No newline at end of file
......@@ -79,6 +79,9 @@ int eyemClp2dIntersectionTwoLines(EyemOcsDABC tpLine1, EyemOcsDABC tpLine2, Eyem
int eyemClp2dIntersectionLineSegment(EyemOcsDABC tpLine, EyemOcsDXY tpPtSt, EyemOcsDXY tpPtEd, int *ipStatus, EyemOcsDXY &tpPoint)
{
if ((tpPtSt.dX - tpPtEd.dX) + (tpPtSt.dY - tpPtEd.dY) < EPS) {
return FUNC_CANNOT_CALC;
}
double d1, d2;
d1 = abs(tpLine.dA*tpPtSt.dX + tpLine.dB*tpPtSt.dY + tpLine.dC) / sqrt(tpLine.dA*tpLine.dA + tpLine.dB*tpLine.dB);
if (abs(tpLine.dB) < FLT_EPSILON) {
......
......@@ -391,8 +391,10 @@ extern "C" {
EXPORTS int eyemMatAdd(EyemImage vpA, EyemImage vpB, EyemImage &vpC);
EXPORTS int eyemMatSub(EyemImage tpImageMinuend, EyemImage tpImageSubtrahend, EyemImage &tpDstImg);
EXPORTS int eyemMatAbs(EyemImage &tpImage);
EXPORTS int eyemCvtType(EyemImage tpImage, const char *ccSubType, double alpha, double beta, EyemImage &tpDstImg);
EXPORTS int eyemCvtColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg);
EXPORTS int eyemNormalize(EyemImage &tpImage);
EXPORTS int eyemDecompose(EyemImage tpImage, EyemImage *tpDstImgR, EyemImage *tpDstImgG, EyemImage *tpDstImgB);
EXPORTS int eyemCvtImageType(EyemImage tpImage, const char *ccSubType, double alpha, double beta, EyemImage &tpDstImg);
EXPORTS int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg);
#ifdef __cplusplus
}
......@@ -479,36 +481,6 @@ extern "C" {
//////////////////////////////////////////////////////////////////////////////////////////////
// 3D 几何计算(3D 卡尺)(eyemClp3d.cpp)
//
#ifdef __cplusplus
extern "C" {
#endif
// 函数接口
void eyemClp3dDistanceTwoPoints(EyemOcsDXYZ *, EyemOcsDXYZ *, double *);
void eyemClp3dCenterTwoPoints(EyemOcsDXYZ *, EyemOcsDXYZ *, EyemOcsDXYZ *);
int eyemClp3dLineTwoPoints(EyemOcsDXYZ *, EyemOcsDXYZ *, EyemOcsDPV *);
int eyemClp3dFootOfPerpendicularToLine(EyemOcsDXYZ *, EyemOcsDPV *, EyemOcsDXYZ *);
int eyemClp3dVerticalLinePointAndLine(EyemOcsDXYZ *, EyemOcsDPV *, EyemOcsDPV *);
int eyemClp3dDistancePointToLine(EyemOcsDXYZ *, EyemOcsDPV *, double *);
int eyemClp3dDistanceTwoLines(EyemOcsDPV *, EyemOcsDPV *, double *);
int eyemClp3dPlaneThreePoints(EyemOcsDXYZ *, EyemOcsDXYZ *, EyemOcsDXYZ *, EyemOcsDABCD *);
int eyemClp3dVerticalPlanePointAndVector(EyemOcsDXYZ *, EyemOcsDXYZ *, EyemOcsDABCD *);
int eyemClp3dVerticalLinePointAndPlane(EyemOcsDXYZ *, EyemOcsDABCD *, EyemOcsDPV *);
int eyemClp3dDistancePointToPlane(EyemOcsDXYZ *, EyemOcsDABCD *, double *);
int eyemClp3dIntersectionLineAndPlane(EyemOcsDPV *, EyemOcsDABCD *, EyemOcsDXYZ *);
int eyemClp3dAngleLineAndPlane(EyemOcsDPV *, EyemOcsDABCD *, double *);
int eyemClp3dFootOfPerpendicularToPlane(EyemOcsDXYZ *, EyemOcsDABCD *, EyemOcsDXYZ *);
int eyemClp3dIntersectionTwoPlanes(EyemOcsDABCD *, EyemOcsDABCD *, EyemOcsDPV *);
int eyemClp3dAngleTwoPlanes(EyemOcsDABCD *, EyemOcsDABCD *, double *);
#ifdef __cplusplus
}
#endif
//////////////////////////////////////////////////////////////////////////////////////////////
// 计算几何(eyemCg.cpp)
//
......@@ -619,6 +591,7 @@ extern "C" {
// 函数接口
EXPORTS int eyemBinThreshold(EyemImage tpSrcImg, int iLightDark, double dThresh, double dMaxVal, EyemImage *tpDstImg);
EXPORTS int eyemBinThresholdC(EyemImage tpImage, int ipRangeL[3], int ipRangeU[3], EyemImage *tpDstImg);
EXPORTS int eyemBinAutoThreshold(EyemImage tpSrcImg, double dSigma, int iLightDark, int binMethod, EyemImage *tpDstImg);
EXPORTS int eyemBinNiBlack(EyemImage tpSrcImg, int iType, int iWinSize, double dK, int binarizationMethod, double dR, EyemImage *tpDstImg);
EXPORTS int eyemBinDynThreshold(EyemImage tpSrcImg, EyemImage tpPreImg, double dOffset, int iType, EyemImage *tpDstImg);
......@@ -627,9 +600,6 @@ extern "C" {
EXPORTS int eyemBinOpening(EyemImage tpSrcImg, int iBinLevel, int iNum, EyemImage *tpDstImg);
EXPORTS int eyemBinClosing(EyemImage tpSrcImg, int iBinLevel, int iNum, EyemImage *tpDstImg);
EXPORTS int eyemBinBlob(EyemImage tpImage, IntPtr *hObject, int iAreaThrs, EyemBinBlob **tpResult, int *ipNum, EyemImage *tpDstImg);
EXPORTS int eyemBinBlobFilterByArea(IntPtr hObject, int iMinArea, int iMaxArea);
EXPORTS int eyemBinBlobFilterByLabel(IntPtr hObject, int iLabel);
EXPORTS int eyemBinBlobRender(EyemImage tpImage, IntPtr hObject, EyemImage *tpDstImg);
EXPORTS bool eyemBinFree(IntPtr hObject);
#ifdef __cplusplus
......@@ -649,8 +619,7 @@ extern "C" {
// 函数接口
EXPORTS int eyemEdge1dGenMeasureRect(EyemImage tpImage, EyemOcsDXY tpLineSt, EyemOcsDXY tpLineEd, int iWhRoi, const char *ccSubType, int iTransition, double dSigma, double dAmpThresh, IntPtr *hObject);
EXPORTS int eyemEdge1dGenPosRect(EyemImage tpImage, EyemOcsDXY tpLineSt, EyemOcsDXY tpLineEd, int iWhRoi, int iTransition, double dSigma, double dAmpThresh, IntPtr *hObject);
EXPORTS int eyemEdge1dFitLine(IntPtr hObject, int iClippingEndPoints, int iMaxIterations, double dRobustCoef, EyemOcsDABC *tpLine);
EXPORTS int eyemEdge1dFitCircle(IntPtr hObject, int iClippingEndPoints, int iMaxIterations, double dRobustCoef, EyemOcsDXYR *tpCircle);
EXPORTS int eyemEdge1dFindCircle(EyemImage tpImage, EyemOcsDXY tpPoint, int iRadius, int iCapLength, int iCapWidth, int nCalipers, int nFilterSize, int iSearchDirec, double dAmpThreshold, const char *ccTransition, IntPtr *hObject);
EXPORTS int eyemEdge1dFindLine(EyemImage tpImage, EyemOcsDXY tpLineSt, EyemOcsDXY tpLineEd, int iCapLength, int iCapWidth, int nCalipers, int iFilterSize, int iSearchDirec, double dAmpThreshold, const char *ccTransition, IntPtr *hObject);
EXPORTS bool eyemEdge1dGenMeasureFree(IntPtr hObject);
......@@ -853,6 +822,7 @@ extern "C" {
EXPORTS int eyemCountObjectE(EyemImage tpImage, EyemRect tpRoi, const char *fileName, int *ipReelNum, EyemImage *tpDstImg);
EXPORTS int eyemCountObjectIrregularParts(EyemImage tpImage, EyemRect tpRoi, const char *fileName, const char * ccSubType, int *ipReelNum, EyemImage *tpDstImg);
EXPORTS int eyemCountObjectIrregularPartsE(EyemImage tpImage, EyemRect tpRoi, const char *fileName, const char *ccTplName, IntPtr hModelID, int *ipReelNum, EyemImage *tpDstImg);
EXPORTS int eyemAchvMatchMat(EyemImage tpImage, EyemRect tpRoi, EyemImage *tpDstImg);
EXPORTS int eyemAchvTemplateImage(EyemImage tpImage, EyemRect tpRoi, EyemImage *tpDstImg);
EXPORTS int eyemCreateTemplateModel(EyemImage tpImage, EyemRect tpRoi, double dMinScore, const char *ccTplName);
EXPORTS int eyemMatchTemplateModel(EyemImage tpImage, IntPtr hModelID, char **lpszTplName);
......
此文件类型无法预览
......@@ -74,8 +74,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>D:\opencv420\build\include;D:\opencv420\build\include\opencv2;D:\tbb2017_20170604oss\include;D:\zxing-cpp-master\core\src;D:\zxing-cpp-master\opencv\src;$(IncludePath)</IncludePath>
<LibraryPath>D:\opencv420\build\x64\vc14\lib;D:\tbb2017_20170604oss\lib\intel64\vc14;D:\zxing-cpp-master\build\Debug;$(LibraryPath)</LibraryPath>
<IncludePath>D:\opencv420\build\include;D:\opencv420\build\include\opencv2;D:\tbb2017_20170604oss\include;D:\zxing-cpp-master\core\src;D:\zxing-cpp-master\opencv\src;D:\feature_extract\include;D:\feature_extract\include\ncnn;$(IncludePath)</IncludePath>
<LibraryPath>D:\opencv420\build\x64\vc14\lib;D:\tbb2017_20170604oss\lib\intel64\vc14;D:\zxing-cpp-master\build\Debug;D:\feature_extract\lib;$(LibraryPath)</LibraryPath>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
......@@ -83,8 +83,8 @@
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IncludePath>D:\opencv420\build\include;D:\opencv420\build\include\opencv2;D:\tbb2017_20170604oss\include;D:\zxing-cpp-master\core\src;D:\zxing-cpp-master\opencv\src;$(IncludePath)</IncludePath>
<LibraryPath>D:\opencv420\build\x64\vc14\lib;D:\tbb2017_20170604oss\lib\intel64\vc14;D:\zxing-cpp-master\build\Release;$(LibraryPath)</LibraryPath>
<IncludePath>D:\opencv420\build\include;D:\opencv420\build\include\opencv2;D:\tbb2017_20170604oss\include;D:\zxing-cpp-master\core\src;D:\zxing-cpp-master\opencv\src;D:\feature_extract\include;D:\feature_extract\include\ncnn;$(IncludePath)</IncludePath>
<LibraryPath>D:\opencv420\build\x64\vc14\lib;D:\tbb2017_20170604oss\lib\intel64\vc14;D:\zxing-cpp-master\build\Release;D:\feature_extract\lib;$(LibraryPath)</LibraryPath>
<TargetExt>.dll</TargetExt>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
......@@ -119,7 +119,7 @@
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libdmtx.lib;libzxing-debug.lib;libdecoded.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libdmtx.lib;libzxing-debug.lib;libdecoded.lib;libresnet.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
......@@ -161,7 +161,7 @@
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
<AdditionalDependencies>libdmtx.lib;libzxing.lib;libdecode.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalDependencies>libdmtx.lib;libzxing.lib;libdecode.lib;libresnet.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
......
......@@ -407,7 +407,7 @@ int eyemMatAbs(EyemImage &tpImage)
return FUNC_OK;
}
int eyemCvtType(EyemImage tpImage, const char *ccSubType, double alpha, double beta, EyemImage &tpDstImg)
int eyemCvtImageType(EyemImage tpImage, const char *ccSubType, double alpha, double beta, EyemImage &tpDstImg)
{
CV_Assert(NULL != tpImage.vpImage);
......@@ -492,7 +492,7 @@ int eyemCvtType(EyemImage tpImage, const char *ccSubType, double alpha, double b
return FUNC_OK;
}
int eyemCvtColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
{
CV_Assert(NULL != tpImage.vpImage);
......@@ -571,4 +571,91 @@ int eyemCvtColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
//拷贝数据
memcpy(tpDstImg.vpImage, _dst.data, _Size);
return FUNC_OK;
}
int eyemDecompose(EyemImage tpImage, EyemImage *tpDstImgR, EyemImage *tpDstImgG, EyemImage *tpDstImgB)
{
CV_Assert(NULL != tpImage.vpImage);
if (tpImage.iChannels != 3) {
return FUNC_CANNOT_USE;
}
cv::Mat image = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage).clone();
//分三通道
std::vector<cv::Mat> mv;
cv::split(image, mv);
//输出结果
tpDstImgR->iWidth = tpDstImgG->iWidth = tpDstImgB->iWidth = tpImage.iWidth;
tpDstImgR->iHeight = tpDstImgG->iHeight = tpDstImgB->iHeight = tpImage.iHeight;
tpDstImgR->iDepth = tpDstImgG->iDepth = tpDstImgB->iDepth = tpImage.iDepth;
tpDstImgR->iChannels = tpDstImgG->iChannels = tpDstImgB->iChannels = 1;
//内存尺寸
int _Size = tpDstImgR->iWidth*tpDstImgR->iHeight*tpDstImgR->iChannels * sizeof(uint8_t);
//分配初始化内存
tpDstImgR->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImgR->vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImgR->vpImage, 0, _Size);
//拷贝数据
memcpy(tpDstImgR->vpImage, mv[2].data, _Size);
tpDstImgG->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImgG->vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImgG->vpImage, 0, _Size);
//拷贝数据
memcpy(tpDstImgG->vpImage, mv[1].data, _Size);
tpDstImgB->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImgB->vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImgB->vpImage, 0, _Size);
//拷贝数据
memcpy(tpDstImgB->vpImage, mv[0].data, _Size);
return FUNC_OK;
}
int eyemNormalize(EyemImage &tpImage)
{
CV_Assert(NULL != tpImage.vpImage);
cv::Mat image = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage).clone();
_free(tpImage);
if (image.channels() != 3) {
cv::cvtColor(image, image, cv::COLOR_BGRA2BGR);
}
const int X = image.cols; const int Y = image.rows;
//归一化
cv::parallel_for_(cv::Range(0, Y), [&](const cv::Range range)->void {
for (int y = range.start; y < range.end; y++) {
for (int x = 0; x < X; x++) {
uint8_t b, g, r;
float bgr = (float)(image.ptr<cv::Vec3b>(y)[x][0] + image.ptr<cv::Vec3b>(y)[x][1] + image.ptr<cv::Vec3b>(y)[x][2]);
bgr = bgr == 0 ? 1 : 1.0f / bgr;
b = cvRound(255.0f*(float)image.ptr<cv::Vec3b>(y)[x][0] * bgr);
g = cvRound(255.0f*(float)image.ptr<cv::Vec3b>(y)[x][1] * bgr);
r = cvRound(255.0f*(float)image.ptr<cv::Vec3b>(y)[x][2] * bgr);
image.ptr<cv::Vec3b>(y)[x] = cv::Vec3b(b, g, r);
}
}
});
//输出
tpImage.iWidth = image.cols; tpImage.iHeight = image.rows; tpImage.iDepth = image.depth(); tpImage.iChannels = image.channels();
int _Size = image.cols *image.rows *image.channels() * sizeof(uint8_t);
tpImage.vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpImage.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpImage.vpImage, 0, _Size);
//拷贝数据
memcpy(tpImage.vpImage, image.data, _Size);
return FUNC_OK;
}
\ No newline at end of file
......@@ -8,6 +8,7 @@
#include "eyemLib.h"
#include <tbb\tbb.h>
constexpr double c = PI / 180.;
extern Logger logger;
......
此文件类型无法预览
#pragma once
#ifndef __RESNET_LIB_H
#define __RESNET_LIB_H
#ifdef __DLLEXPORT
#define __DLL_EXP _declspec(dllexport) // 导出函数 - 生成dll文件时使用
#else
#define __DLL_EXP _declspec(dllimport) // 导入函数 -使用dll时使用
#endif // __DLLEXPORT
#include "ncnn/net.h"
#include "opencv2/opencv.hpp"
#include <vector>
#include <iostream>
#include<fstream>
#include <sstream>
#include <string>
#include <windows.h>
//typedef struct {
// void* vpImage; // 地址
// int iWidth; // 图像内存 x 方向大小
// int iHeight; // 图像内存 y 方向大小
// int iDepth; // 图像位深度(参见说明)
// int iChannels; // 图像通道数
//} EyemImage;
#ifndef MAKETYPE
#define MAKETYPE CV_MAKETYPE
#endif
//// 一般定义
//#define FUNC_OK 0 // 正常
//#define FUNC_NOT_ENOUGH_MEM -1 // 工作内存不足
//#define FUNC_ILLEGAL_ARGUMENT -2 // 参数不合适
//#define FUNC_IMAGE_NOT_EXIST -3 // 图像不存在
//#define FUNC_CANNOT_CALC -100 // 不可计算
//#define FUNC_CANNOT_USE -999 // 不可用
#ifdef __cplusplus
extern "C" {
#endif
__DLL_EXP void match_feature(const char* input_path, EyemImage image, char* part_number);
__DLL_EXP void enroll_feature(const char* input_path, const char* output_path);
#ifdef __cplusplus
}
#endif
#endif
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!