Commit bebc2453 张士柳

整理

1 个父辈 04c03c6d
...@@ -305,7 +305,7 @@ namespace eyemLib_Sharp ...@@ -305,7 +305,7 @@ namespace eyemLib_Sharp
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]
public struct EyemImage public struct EyemImage
{ {
public IntPtr vpImage; // 地址 public IntPtr vpImage; // 地址
public int iWidth; // 图像内存 x 方向大小 public int iWidth; // 图像内存 x 方向大小
public int iHeight; // 图像内存 y 方向大小 public int iHeight; // 图像内存 y 方向大小
public int iDepth; // 图像位深度(详见说明) public int iDepth; // 图像位深度(详见说明)
...@@ -600,15 +600,18 @@ namespace eyemLib_Sharp ...@@ -600,15 +600,18 @@ namespace eyemLib_Sharp
//图像数据格式转换 //图像数据格式转换
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, ref EyemImage tpDstImg); private static extern int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, ref EyemImage tpDstImg);
//显示图像 //图像相加
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemImageDisplay(string ccWinName, EyemImage tpImage); private static extern int eyemImageAdd(EyemImage tpImage1, EyemImage tpImage2, ref EyemImage tpDstImg);
//创建窗口 //图像相减
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemOpenWindow(string ccWinName); private static extern int eyemImageSub(EyemImage tpImageMinuend, EyemImage tpImageSubtrahend, ref EyemImage tpDstImg);
//关闭窗口 //图像相除
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemCloseWindow(string ccWinName); private static extern int eyemImageDiv(EyemImage tpImage1, EyemImage tpImage2, ref EyemImage tpDstImg);
//图像取绝对值
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemImageAbs(EyemImage tpImage, ref EyemImage tpDstImg);
//释放图像资源 //释放图像资源
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern void eyemImageFree(IntPtr ipImage); private static extern void eyemImageFree(IntPtr ipImage);
...@@ -701,25 +704,32 @@ namespace eyemLib_Sharp ...@@ -701,25 +704,32 @@ namespace eyemLib_Sharp
public static void eyemReadImageTool(string fileName) public static void eyemReadImageTool(string fileName)
{ {
EyemImage ucpImage; EyemImage image;
EyemImage tpDstImg = new EyemImage(); EyemImage tpDstImg = new EyemImage();
//int flag = eyemImageRead("D:\\图片及统计结果\\图片及统计结果\\data\\6D551\\6D551-R014212020040601587-20200624140637.png", 0, out ucpImage); //int flag = eyemImageRead("D:\\图片及统计结果\\图片及统计结果\\data\\6D551\\6D551-R014212020040601587-20200624140637.png", 0, out ucpImage);
//int flag = eyemImageReadRaw(fileName, 3072, 3072, 2, out ucpImage); //int flag = eyemImageReadRaw(fileName, 3072, 3072, 2, out ucpImage);
int flag = eyemImageRead(fileName, -1, out ucpImage); int flag = eyemImageRead(fileName, -1, out image);
if (flag != 0) if (flag != 0)
{ {
Console.WriteLine("读图失败!"); Console.WriteLine("读图失败!");
return; return;
} }
eyemOpenWindow("eyemLib"); EyemImage image1 = new EyemImage();
EyemImage image2 = new EyemImage();
flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "int8_t", out image1);
//flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "int8_t", out image2);
//flag = eyemImageAdd(image1, image2, ref tpDstImg);
eyemImageDisplay("eyemLib", ucpImage); //flag = eyemImageSub(image1, image2, ref tpDstImg)
//flag = eyemImageMalloc(ucpImage.iWidth, ucpImage.iHeight, 1, "uint8_t", out tpDstImg); //flag = eyemImageAbs(image1, ref tpDstImg);
//flag = eyemCvtImageColor(ucpImage, (int)ColorConversionCodes.COLOR_BGR2RGB, ref tpDstImg); //flag = eyemCvtImageColor(ucpImage, (int)ColorConversionCodes.COLOR_BGR2RGB, ref tpDstImg);
//Bitmap bmp = new Bitmap(ucpImage.iWidth, ucpImage.iHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed); //Bitmap bmp = new Bitmap(ucpImage.iWidth, ucpImage.iHeight, System.Drawing.Imaging.PixelFormat.Format8bppIndexed);
//ColorPalette color_palette_gray_ = bmp.Palette; //ColorPalette color_palette_gray_ = bmp.Palette;
//for (int i = 0; i < 256; i++) //for (int i = 0; i < 256; i++)
...@@ -878,8 +888,8 @@ namespace eyemLib_Sharp ...@@ -878,8 +888,8 @@ namespace eyemLib_Sharp
EyemRect tpRoi = new EyemRect(); EyemRect tpRoi = new EyemRect();
tpRoi.iXs = tpRoi.iYs = 0; tpRoi.iXs = tpRoi.iYs = 0;
tpRoi.iWidth = ucpImage.iWidth; tpRoi.iWidth = image.iWidth;
tpRoi.iHeight = ucpImage.iHeight; tpRoi.iHeight = image.iHeight;
// //
string pNumObj = ""; string pNumObj = "";
string file = fileName.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)[2]; string file = fileName.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)[2];
...@@ -899,53 +909,9 @@ namespace eyemLib_Sharp ...@@ -899,53 +909,9 @@ namespace eyemLib_Sharp
//Console.WriteLine("耗时:" + sw.ElapsedMilliseconds.ToString() + ",结果:" + pNumObj); //Console.WriteLine("耗时:" + sw.ElapsedMilliseconds.ToString() + ",结果:" + pNumObj);
//free image //free image
eyemImageFree(tpDstImg.vpImage); eyemImageFree(tpDstImg.vpImage);
eyemImageFree(ucpImage.vpImage); eyemImageFree(image.vpImage);
}
//计算最佳参数
public static void eyemReadImageToolTest(string fileName)
{
EyemImage ucpImage;
int flag = eyemImageRead(fileName, -1, out ucpImage);
if (flag != 0)
{
Console.WriteLine("读图失败!");
return;
}
EyemRect tpRoi = new EyemRect();
tpRoi.iXs = tpRoi.iYs = 0;
tpRoi.iWidth = ucpImage.iWidth;
tpRoi.iHeight = ucpImage.iHeight;
//
System.Collections.Generic.Dictionary<int, int> dictPara = new System.Collections.Generic.Dictionary<int, int>();
string file = fileName.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)[2];
for (int ii = 5; ii < 27; ii += 2)
{
int ipNum; EyemBarCode* tpResults;
DataCodeHandle hObject;
int iRes = eyemDetectAndDecode(ucpImage, tpRoi, file.Replace(".png", ""), "QR_CODE|DATA_MATRIX|CODE_128", out hObject, out tpResults, out ipNum, false, ii, 5, 128, 215, 1d);
dictPara.Add(ii, ipNum);
hObject.Dispose();
//Console.WriteLine("数量:" + ipNum + ";" + "参数:" + ii.ToString());
}
var sortResult = from dic in dictPara orderby dic.Value descending select dic;
foreach (KeyValuePair<int, int> kvp in sortResult)
{
int ipNum; EyemBarCode* tpResults;
DataCodeHandle hObject;
int iRes = eyemDetectAndDecode(ucpImage, tpRoi, file.Replace(".png", ""), "QR_CODE|DATA_MATRIX|CODE_128", out hObject, out tpResults, out ipNum, false, kvp.Key, 5, 128, 215, 1d);
hObject.Dispose();
Console.WriteLine("最佳参数:" + kvp.Key);
break;
}
//free image
eyemImageFree(ucpImage.vpImage);
return;
} }
#region 结构转内存指针 #region 结构转内存指针
public static IntPtr teStructArray2IntPtr(EyemOcsDXY[] tpPoints, int iLength) public static IntPtr teStructArray2IntPtr(EyemOcsDXY[] tpPoints, int iLength)
{ {
......
using Microsoft.Win32.SafeHandles;
using System;
using System.Runtime.InteropServices;
namespace eyemLib_Sharp
{
//public unsafe class EyemSamples
//{
// #region 通用
// // Win32 memory copy function
// [DllImport("ntdll.dll", CallingConvention = CallingConvention.Cdecl)]
// private static extern byte* memcpy(byte* dst, byte* src, int count);
// //读取图像
// [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
// private static extern int eyemImageRead(string filename, int iFalgs, out EyemImage ucpImage);
// //保存图像
// [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
// private static extern int eyemImageWrite(string filename, EyemImage ipImage);
// //释放图像资源
// [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
// private static extern void eyemImageFree(IntPtr ipImage);
// #endregion
// //读码程序
// [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
// private static extern int eyemDetectAndDecode(EyemImage tpImage, EyemRect tpRoi, string fileName, string strCodeType, out DataCodeHandle hObject, out EyemBarCode* tpResults, out int ipNum, bool bUseNiBlack, int iBlockSize, int iRangeC, int iSymbolMin, int iSymbolMax, double dToleErr = 0.5, double dMinorStep = 1.0);
// //释放工具
// [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
// private static extern bool eyemDetectAndDecodeFree(IntPtr hObject);
// public static void eyemReadImageTool(string fileName)
// {
// EyemImage ucpImage;
// int flag = eyemImageRead(fileName, -1, out ucpImage);
// if (flag != 0)
// {
// Console.WriteLine("读图失败!");
// return;
// }
// EyemRect tpRoi = new EyemRect();
// tpRoi.iXs = tpRoi.iYs = 0;
// tpRoi.iWidth = ucpImage.iWidth;
// tpRoi.iHeight = ucpImage.iHeight;
// string file = fileName.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)[2];
// int ipNum; EyemBarCode* tpResults;
// DataCodeHandle hObject;
// eyemDetectAndDecode(ucpImage, tpRoi, file.Replace(".png", ""), "QRCode", out hObject, out tpResults, out ipNum, false, 11, 5, 128, 215);
// for (int i = 0; i < ipNum; i++)
// {
// Console.WriteLine("类型:" + Marshal.PtrToStringAnsi(tpResults[i].hType) + ";坐标" + "[" + tpResults[i].iCenterX.ToString() + "," + tpResults[i].iCenterY.ToString() + "]" + ";内容:" + Marshal.PtrToStringAnsi(tpResults[i].hText) + "");
// }
// //释放
// hObject.Dispose();
// //释放图像
// eyemImageFree(ucpImage.ucpImage);
// }
// //释放解码句柄
// public class DataCodeHandle : SafeHandleZeroOrMinusOneIsInvalid
// {
// public DataCodeHandle() : base(true) { }
// protected override bool ReleaseHandle()
// {
// return eyemDetectAndDecodeFree(handle);
// }
// }
//}
}
...@@ -48,7 +48,6 @@ ...@@ -48,7 +48,6 @@
<Reference Include="System.Xml" /> <Reference Include="System.Xml" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="EyemSamples.cs" />
<Compile Include="EyemLib.cs" /> <Compile Include="EyemLib.cs" />
<Compile Include="Program.cs" /> <Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" /> <Compile Include="Properties\AssemblyInfo.cs" />
......
...@@ -51,6 +51,7 @@ static cv::Mat getQRRegion(cv::Mat src, cv::RotatedRect rect, double angle) ...@@ -51,6 +51,7 @@ static cv::Mat getQRRegion(cv::Mat src, cv::RotatedRect rect, double angle)
return image(RoiRect); return image(RoiRect);
} }
static void split(const std::string &cStrText, const std::string &cStrDelim, std::vector<std::string> &vStrs) static void split(const std::string &cStrText, const std::string &cStrDelim, std::vector<std::string> &vStrs)
{ {
char *cpStr = new char[strlen(cStrText.c_str()) + 1]; char *cpStr = new char[strlen(cStrText.c_str()) + 1];
...@@ -67,6 +68,7 @@ static void split(const std::string &cStrText, const std::string &cStrDelim, std ...@@ -67,6 +68,7 @@ static void split(const std::string &cStrText, const std::string &cStrDelim, std
cpStr = NULL; cpStr = NULL;
} }
static void filterByApriltag(cv::Mat &binary, cv::Mat &labels, std::vector<tMap> &vPts, std::vector<uchar> &colors, int nccomps, double dToleErr = 0.5) static void filterByApriltag(cv::Mat &binary, cv::Mat &labels, std::vector<tMap> &vPts, std::vector<uchar> &colors, int nccomps, double dToleErr = 0.5)
{ {
//图像尺寸 //图像尺寸
...@@ -257,12 +259,14 @@ static void filterByApriltag(cv::Mat &binary, cv::Mat &labels, std::vector<tMap> ...@@ -257,12 +259,14 @@ static void filterByApriltag(cv::Mat &binary, cv::Mat &labels, std::vector<tMap>
}); });
} }
static inline bool isContainsTwoDCode() static inline bool isContainsTwoDCode()
{ {
return false; return false;
} }
static double getThreshVal_Otsu_8u(const cv::Mat& _src) static double getThreshVal_Otsu_8u(const cv::Mat& _src)
{ {
cv::Size size = _src.size(); cv::Size size = _src.size();
...@@ -339,6 +343,7 @@ static double getThreshVal_Otsu_8u(const cv::Mat& _src) ...@@ -339,6 +343,7 @@ static double getThreshVal_Otsu_8u(const cv::Mat& _src)
return max_val; return max_val;
} }
static void decodeMul(std::vector<WaitArea> &waitAreas, std::vector<std::string> &hints, cv::Mat &showMat, std::vector<DecodeResult> &decodeResults, int iBlockSize, const int iRangeC, double dMinorStep) static void decodeMul(std::vector<WaitArea> &waitAreas, std::vector<std::string> &hints, cv::Mat &showMat, std::vector<DecodeResult> &decodeResults, int iBlockSize, const int iRangeC, double dMinorStep)
{ {
//进入线程锁 //进入线程锁
...@@ -564,6 +569,7 @@ static void decodeMul(std::vector<WaitArea> &waitAreas, std::vector<std::string> ...@@ -564,6 +569,7 @@ static void decodeMul(std::vector<WaitArea> &waitAreas, std::vector<std::string>
mtx.unlock(); mtx.unlock();
} }
static int calcHist(cv::Mat src) static int calcHist(cv::Mat src)
{ {
const int histSize = 256; const int histSize = 256;
...@@ -578,6 +584,7 @@ static int calcHist(cv::Mat src) ...@@ -578,6 +584,7 @@ static int calcHist(cv::Mat src)
return maxIdx[0]; return maxIdx[0];
} }
int eyemDetectAndDecode(EyemImage tpImage, EyemRect tpRoi, const char *ccFileName, const char *ccCodeType, IntPtr *hObject, EyemBarCode **hResults, int *ipNum, bool bUseNiBlack, int iBlockSize, const int iRangeC, int iSymbolMin, int iSymbolMax, double dScaleUpAndDown, double dToleErr, double dMinorStep) int eyemDetectAndDecode(EyemImage tpImage, EyemRect tpRoi, const char *ccFileName, const char *ccCodeType, IntPtr *hObject, EyemBarCode **hResults, int *ipNum, bool bUseNiBlack, int iBlockSize, const int iRangeC, int iSymbolMin, int iSymbolMax, double dScaleUpAndDown, double dToleErr, double dMinorStep)
{ {
cv::Mat src = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage); cv::Mat src = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage);
...@@ -1496,6 +1503,7 @@ int eyemDetectAndDecode(EyemImage tpImage, EyemRect tpRoi, const char *ccFileNam ...@@ -1496,6 +1503,7 @@ int eyemDetectAndDecode(EyemImage tpImage, EyemRect tpRoi, const char *ccFileNam
return FUNC_OK; return FUNC_OK;
} }
int eyemCalcDetectParameter(EyemImage tpImage, EyemRect tpRoi, const char *ccFileName, bool bTrainOneD, int iBlockSize, int *ipNum, int *iSymbolMin, int *iSymbolMax) int eyemCalcDetectParameter(EyemImage tpImage, EyemRect tpRoi, const char *ccFileName, bool bTrainOneD, int iBlockSize, int *ipNum, int *iSymbolMin, int *iSymbolMax)
{ {
cv::Mat src = cv::Mat(tpImage.iHeight, tpImage.iWidth, tpImage.iDepth, tpImage.vpImage); cv::Mat src = cv::Mat(tpImage.iHeight, tpImage.iWidth, tpImage.iDepth, tpImage.vpImage);
...@@ -1783,6 +1791,7 @@ int eyemCalcDetectParameter(EyemImage tpImage, EyemRect tpRoi, const char *ccFil ...@@ -1783,6 +1791,7 @@ int eyemCalcDetectParameter(EyemImage tpImage, EyemRect tpRoi, const char *ccFil
return FUNC_OK; return FUNC_OK;
} }
bool eyemDetectAndDecodeFree(IntPtr hObject) bool eyemDetectAndDecodeFree(IntPtr hObject)
{ {
std::vector<EyemBarCode> *tpResults = reinterpret_cast<std::vector<EyemBarCode>*>(hObject); std::vector<EyemBarCode> *tpResults = reinterpret_cast<std::vector<EyemBarCode>*>(hObject);
......
#pragma once
//
// eyemSmooth¡¤±êÍ·
//
#ifndef __EYEM_EDLINES_H
#define __EYEM_EDLINES_H
#include "eyemLib.h"
#include <algorithm>
#include <map>
using namespace cv;
struct SEGMENT
{
float x1, y1, x2, y2, angle;
};
/**
* Detect lines in the input image.
*
* @param _image A grayscale(CV_8UC1) input image.
* If only a roi needs to be selected, use
* lsd_ptr->detect(image(roi), ..., lines);
* lines += Scalar(roi.x, roi.y, roi.x, roi.y);
* @param _lines Return: A vector of Vec4f elements specifying the beginning and ending point of
* a line. Where Vec4f is (x1, y1, x2, y2), point 1 is the start, point 2 is the end.
* Returned lines are directed so that the brighter side is placed on left.
*/
void detectE(cv::InputArray _image, cv::OutputArray _lines);
/**
* Draw lines on the given canvas.
*
* @param image The image, where lines will be drawn
* Should have the size of the image, where the lines were found
* @param lines The lines that need to be drawn
* @param draw_arrow If true, arrow heads will be drawn
*/
void drawSegmentsE(cv::InputOutputArray _image, cv::InputArray lines, bool draw_arrow = false);
int imagewidth, imageheight, threshold_length;
float threshold_dist;
double canny_th1, canny_th2;
int canny_aperture_size;
bool do_merge;
//template<class T>
//void incidentPoint(const Mat& l, T& pt);
void mergeLinesE(const SEGMENT& seg1, const SEGMENT& seg2, SEGMENT& seg_merged);
bool mergeSegmentsE(const SEGMENT& seg1, const SEGMENT& seg2, SEGMENT& seg_merged);
bool getPointChainE(const cv::Mat& img, cv::Point pt, cv::Point& chained_pt, float& direction, int step);
double distPointLineE(const cv::Mat& p, cv::Mat& l);
void extractSegmentsE(const std::vector<cv::Point2i>& points, std::vector<SEGMENT>& segments);
void lineDetectionE(const cv::Mat& src, std::vector<SEGMENT>& segments_all);
void pointInboardTestE(const cv::Mat& src, cv::Point2i& pt);
inline void getAngleE(SEGMENT& seg);
void additionalOperationsOnSegmentE(const cv::Mat& src, SEGMENT& seg);
void drawSegmentE(cv::Mat& mat, const SEGMENT& seg, cv::Scalar bgr = cv::Scalar(0, 255, 0),
int thickness = 1, bool directed = true);
#endif/* __EYEM_EDLINES_H */
\ No newline at end of file \ No newline at end of file
...@@ -448,11 +448,11 @@ int eyemEdge1dFitCircle(IntPtr hObject, int iClippingEndPoints, int iMaxIteratio ...@@ -448,11 +448,11 @@ int eyemEdge1dFitCircle(IntPtr hObject, int iClippingEndPoints, int iMaxIteratio
return FUNC_OK; return FUNC_OK;
} }
//int eyemEdge1dGenArc(EyemImage tpImage, EyemOcsDXY tpLineSt, EyemOcsDXY tpLineEd, int iWhRoi, int iEdgeDirec, EyemOcsDXY *tpEdge) int eyemEdge1dGenArc(EyemImage tpImage, EyemOcsDXY tpLineSt, EyemOcsDXY tpLineEd, int iWhRoi, int iEdgeDirec, EyemOcsDXY *tpEdge)
//{ {
//
// return FUNC_OK; return FUNC_OK;
//} }
bool eyemEdge1dGenMeasureFree(IntPtr hObject) bool eyemEdge1dGenMeasureFree(IntPtr hObject)
{ {
......
...@@ -75,7 +75,6 @@ int eyemImageRead(const char *filename, int iFlag, EyemImage *tpImage) ...@@ -75,7 +75,6 @@ int eyemImageRead(const char *filename, int iFlag, EyemImage *tpImage)
return FUNC_OK; return FUNC_OK;
} }
int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubType, EyemImage *tpImage) int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubType, EyemImage *tpImage)
{ {
//图像信息 //图像信息
...@@ -148,7 +147,6 @@ int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubTyp ...@@ -148,7 +147,6 @@ int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubTyp
return FUNC_OK; return FUNC_OK;
} }
int eyemImageReadRaw(const char *filename, int iWidth, int iHeight, int iDepth, EyemImage *tpImage) int eyemImageReadRaw(const char *filename, int iWidth, int iHeight, int iDepth, EyemImage *tpImage)
{ {
if (std::strlen(filename) == 0) if (std::strlen(filename) == 0)
...@@ -185,7 +183,6 @@ int eyemImageReadRaw(const char *filename, int iWidth, int iHeight, int iDepth, ...@@ -185,7 +183,6 @@ int eyemImageReadRaw(const char *filename, int iWidth, int iHeight, int iDepth,
return FUNC_OK; return FUNC_OK;
} }
int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, EyemImage &tpDstImg) int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, EyemImage &tpDstImg)
{ {
CV_Assert(NULL != tpImage.vpImage); CV_Assert(NULL != tpImage.vpImage);
...@@ -198,7 +195,6 @@ int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, Ey ...@@ -198,7 +195,6 @@ int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, Ey
return FUNC_OK; return FUNC_OK;
} }
int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg) int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
{ {
CV_Assert(NULL != tpImage.vpImage); CV_Assert(NULL != tpImage.vpImage);
...@@ -208,7 +204,7 @@ int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg) ...@@ -208,7 +204,7 @@ int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
cv::cvtColor(cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage), \ cv::cvtColor(cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage), \
_dst, iCCodes); _dst, iCCodes);
//如果预先分配了内存,则判断基本信息是否符合 //如果预先分配了内存,则判断是否符合结果类型
if (NULL != tpDstImg.vpImage) if (NULL != tpDstImg.vpImage)
CV_Assert(_dst.cols == tpDstImg.iWidth && _dst.rows == tpDstImg.iHeight && _dst.depth() == tpDstImg.iDepth && _dst.channels() == tpDstImg.iChannels); CV_Assert(_dst.cols == tpDstImg.iWidth && _dst.rows == tpDstImg.iHeight && _dst.depth() == tpDstImg.iDepth && _dst.channels() == tpDstImg.iChannels);
...@@ -282,16 +278,17 @@ int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg) ...@@ -282,16 +278,17 @@ int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg)
return FUNC_OK; return FUNC_OK;
} }
int eyemImageAdd(EyemImage tpImage1, EyemImage tpImage2, EyemImage &tpDstImg)
int eyemImageAdd(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg)
{ {
CV_Assert((NULL != tpImageA.vpImage) && (NULL != tpImageB.vpImage)); CV_Assert((NULL != tpImage1.vpImage) && (NULL != tpImage2.vpImage));
CV_Assert(tpImageA.iWidth == tpImageB.iWidth&&tpImageA.iHeight == tpImageB.iHeight&&tpImageA.iDepth == tpImageB.iDepth&&tpImageA.iChannels == tpImageB.iChannels); //必须具有相同类型
CV_Assert(tpImage1.iWidth == tpImage2.iWidth&&tpImage1.iHeight == tpImage2.iHeight&&tpImage1.iDepth == tpImage2.iDepth&&tpImage1.iChannels == \
tpImage2.iChannels);
cv::Mat _dst; cv::Mat _dst;
cv::add(cv::Mat(tpImageA.iHeight, tpImageA.iWidth, MAKETYPE(tpImageA.iDepth, tpImageA.iChannels), tpImageA.vpImage), \ cv::add(cv::Mat(tpImage1.iHeight, tpImage1.iWidth, MAKETYPE(tpImage1.iDepth, tpImage1.iChannels), tpImage1.vpImage), \
cv::Mat(tpImageB.iHeight, tpImageB.iWidth, MAKETYPE(tpImageB.iDepth, tpImageB.iChannels), tpImageB.vpImage), _dst); cv::Mat(tpImage2.iHeight, tpImage2.iWidth, MAKETYPE(tpImage2.iDepth, tpImage2.iChannels), tpImage2.vpImage), _dst);
//如果预先分配了内存,则判断基本信息是否符合 //如果预先分配了内存,则判断基本信息是否符合
if (NULL != tpDstImg.vpImage) if (NULL != tpDstImg.vpImage)
...@@ -367,16 +364,17 @@ int eyemImageAdd(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg) ...@@ -367,16 +364,17 @@ int eyemImageAdd(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg)
return FUNC_OK; return FUNC_OK;
} }
int eyemImageSub(EyemImage tpImageMinuend, EyemImage tpImageSubtrahend, EyemImage &tpDstImg)
int eyemImageSub(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg)
{ {
CV_Assert((NULL != tpImageA.vpImage) && (NULL != tpImageB.vpImage)); CV_Assert((NULL != tpImageMinuend.vpImage) && (NULL != tpImageSubtrahend.vpImage));
CV_Assert(tpImageA.iWidth == tpImageB.iWidth&&tpImageA.iHeight == tpImageB.iHeight&&tpImageA.iDepth == tpImageB.iDepth&&tpImageA.iChannels == tpImageB.iChannels); //必须具有相同类型
CV_Assert(tpImageMinuend.iWidth == tpImageSubtrahend.iWidth&&tpImageMinuend.iHeight == tpImageSubtrahend.iHeight&&tpImageMinuend.iDepth == tpImageSubtrahend\
.iDepth&&tpImageMinuend.iChannels == tpImageSubtrahend.iChannels);
cv::Mat _dst; cv::Mat _dst;
cv::subtract(cv::Mat(tpImageA.iHeight, tpImageA.iWidth, MAKETYPE(tpImageA.iDepth, tpImageA.iChannels), tpImageA.vpImage), \ cv::subtract(cv::Mat(tpImageMinuend.iHeight, tpImageMinuend.iWidth, MAKETYPE(tpImageMinuend.iDepth, tpImageMinuend.iChannels), tpImageMinuend.vpImage), \
cv::Mat(tpImageB.iHeight, tpImageB.iWidth, MAKETYPE(tpImageB.iDepth, tpImageB.iChannels), tpImageB.vpImage), _dst); cv::Mat(tpImageSubtrahend.iHeight, tpImageSubtrahend.iWidth, MAKETYPE(tpImageSubtrahend.iDepth, tpImageSubtrahend.iChannels), tpImageSubtrahend.vpImage), _dst);
//如果预先分配了内存,则判断基本信息是否符合 //如果预先分配了内存,则判断基本信息是否符合
if (NULL != tpDstImg.vpImage) if (NULL != tpDstImg.vpImage)
...@@ -452,12 +450,17 @@ int eyemImageSub(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg) ...@@ -452,12 +450,17 @@ int eyemImageSub(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpDstImg)
return FUNC_OK; return FUNC_OK;
} }
int eyemImageDiv(EyemImage tpImage1, EyemImage tpImage2, EyemImage &tpDstImg)
int eyemImageAbs(EyemImage tpImage, EyemImage &tpDstImg)
{ {
CV_Assert((NULL != tpImage.vpImage)); CV_Assert((NULL != tpImage1.vpImage) && (NULL != tpImage2.vpImage));
cv::Mat _dst = cv::abs(cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage)); //必须具有相同类型
CV_Assert(tpImage1.iWidth == tpImage2.iWidth&&tpImage1.iHeight == tpImage2.iHeight&&tpImage1.iDepth == tpImage2.iDepth&&tpImage1.iChannels == \
tpImage2.iChannels);
cv::Mat _dst;
cv::divide(cv::Mat(tpImage1.iHeight, tpImage1.iWidth, MAKETYPE(tpImage1.iDepth, tpImage1.iChannels), tpImage1.vpImage), \
cv::Mat(tpImage2.iHeight, tpImage2.iWidth, MAKETYPE(tpImage2.iDepth, tpImage2.iChannels), tpImage2.vpImage), _dst);
//如果预先分配了内存,则判断基本信息是否符合 //如果预先分配了内存,则判断基本信息是否符合
if (NULL != tpDstImg.vpImage) if (NULL != tpDstImg.vpImage)
...@@ -533,31 +536,86 @@ int eyemImageAbs(EyemImage tpImage, EyemImage &tpDstImg) ...@@ -533,31 +536,86 @@ int eyemImageAbs(EyemImage tpImage, EyemImage &tpDstImg)
return FUNC_OK; return FUNC_OK;
} }
int eyemImageAbs(EyemImage tpImage, EyemImage &tpDstImg)
void eyemImageDisplay(const char *ccWinName, EyemImage tpImage)
{ {
CV_Assert(NULL != tpImage.vpImage); CV_Assert((NULL != tpImage.vpImage));
cv::Mat src = cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage);
cv::imshow(ccWinName, src); cv::Mat _dst = cv::abs(cv::Mat(tpImage.iHeight, tpImage.iWidth, MAKETYPE(tpImage.iDepth, tpImage.iChannels), tpImage.vpImage));
cv::waitKey(1); //如果预先分配了内存,则判断基本信息是否符合
} if (NULL != tpDstImg.vpImage)
CV_Assert(_dst.cols == tpDstImg.iWidth && _dst.rows == tpDstImg.iHeight && _dst.depth() == tpDstImg.iDepth && _dst.channels() == tpDstImg.iChannels);
//内存尺寸
int _Size = _dst.cols *_dst.rows *_dst.channels();
void eyemOpenWindow(const char *ccWinName) //不存在则创建
{ if (NULL == tpDstImg.vpImage) {
cv::namedWindow(ccWinName, cv::WINDOW_AUTOSIZE); //目标图像信息
} tpDstImg.iWidth = _dst.cols, tpDstImg.iHeight = _dst.rows, tpDstImg.iDepth = _dst.depth(), tpDstImg.iChannels = _dst.channels();
switch (tpDstImg.iDepth)
{
case CV_8U:
_Size *= sizeof(uint8_t);
tpDstImg.vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_8S:
_Size *= sizeof(int8_t);
tpDstImg.vpImage = (int8_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_16U:
_Size *= sizeof(uint16_t);
tpDstImg.vpImage = (uint16_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_16S:
_Size *= sizeof(int16_t);
tpDstImg.vpImage = (int16_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_32S:
_Size *= sizeof(int32_t);
tpDstImg.vpImage = (int32_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_32F:
_Size *= sizeof(float_t);
tpDstImg.vpImage = (float_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
case CV_64F:
_Size *= sizeof(double_t);
tpDstImg.vpImage = (double_t *)malloc(_Size);
if (NULL == tpDstImg.vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg.vpImage, 0, _Size);
break;
default:
//no support format
return FUNC_CANNOT_USE;
}
}
//拷贝数据
memcpy(tpDstImg.vpImage, _dst.data, _Size);
void eyemCloseWindow(const char *ccWinName) return FUNC_OK;
{
cv::destroyWindow(ccWinName);
} }
void eyemImageFree(void *vpImage) void eyemImageFree(void *vpImage)
{ {
//must be free 空指针也没关系 //must be free 空指针也没关系
......
...@@ -8,5 +8,4 @@ ...@@ -8,5 +8,4 @@
#include "eyemLib.h" #include "eyemLib.h"
#endif/* __EYEM_GENERIC_H */ #endif/* __EYEM_GENERIC_H */
\ No newline at end of file \ No newline at end of file
...@@ -7,7 +7,6 @@ ...@@ -7,7 +7,6 @@
#include <Windows.h> #include <Windows.h>
#include <opencv.hpp> #include <opencv.hpp>
#include <opencv2\opencv.hpp>
#ifndef EXPORTS #ifndef EXPORTS
...@@ -786,12 +785,10 @@ extern "C" { ...@@ -786,12 +785,10 @@ extern "C" {
EXPORTS int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubType, EyemImage *tpImage); EXPORTS int eyemImageMalloc(int iWidth, int iHeight, int iChannels, const char *ccSubType, EyemImage *tpImage);
EXPORTS int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg); EXPORTS int eyemCvtImageColor(EyemImage tpImage, int iCCodes, EyemImage &tpDstImg);
EXPORTS int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, EyemImage &tpDstImg); EXPORTS int eyemCvtImageType(EyemImage tpImage, int rType, double alpha, double beta, EyemImage &tpDstImg);
EXPORTS int eyemImageAdd(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpImage); EXPORTS int eyemImageAdd(EyemImage tpImage1, EyemImage tpImage2, EyemImage &tpDstImg);
EXPORTS int eyemImageSub(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpImage); EXPORTS int eyemImageSub(EyemImage tpImageMinuend, EyemImage tpImageSubtrahend, EyemImage &tpDstImg);
EXPORTS int eyemImageAbs(EyemImage tpImageA, EyemImage tpImageB, EyemImage &tpImage); EXPORTS int eyemImageDiv(EyemImage tpImage1, EyemImage tpImage2, EyemImage &tpDstImg);
EXPORTS void eyemImageDisplay(const char *ccWinName, EyemImage tpImage); EXPORTS int eyemImageAbs(EyemImage tpImage, EyemImage &tpDstImg);
EXPORTS void eyemOpenWindow(const char *ccWinName);
EXPORTS void eyemCloseWindow(const char *ccWinName);
EXPORTS void eyemImageFree(void *ipImage); EXPORTS void eyemImageFree(void *ipImage);
#ifdef __cplusplus #ifdef __cplusplus
......
...@@ -166,7 +166,6 @@ ...@@ -166,7 +166,6 @@
<ClInclude Include="eyemClp2d.h" /> <ClInclude Include="eyemClp2d.h" />
<ClInclude Include="eyemEdge.h" /> <ClInclude Include="eyemEdge.h" />
<ClInclude Include="eyemEdge1d.h" /> <ClInclude Include="eyemEdge1d.h" />
<ClInclude Include="eyemEDLinesDetector.h" />
<ClInclude Include="eyemFit.h" /> <ClInclude Include="eyemFit.h" />
<ClInclude Include="eyemGeneric.h" /> <ClInclude Include="eyemGeneric.h" />
<ClInclude Include="eyemLib.h" /> <ClInclude Include="eyemLib.h" />
...@@ -185,7 +184,6 @@ ...@@ -185,7 +184,6 @@
<ClCompile Include="eyemClp3d.cpp" /> <ClCompile Include="eyemClp3d.cpp" />
<ClCompile Include="eyemEdge.cpp" /> <ClCompile Include="eyemEdge.cpp" />
<ClCompile Include="eyemEdge1d.cpp" /> <ClCompile Include="eyemEdge1d.cpp" />
<ClCompile Include="eyemEDLinesDetector.cpp" />
<ClCompile Include="eyemFit.cpp" /> <ClCompile Include="eyemFit.cpp" />
<ClCompile Include="eyemGeneric.cpp" /> <ClCompile Include="eyemGeneric.cpp" />
<ClCompile Include="eyemLib.cpp" /> <ClCompile Include="eyemLib.cpp" />
......
...@@ -57,9 +57,6 @@ ...@@ -57,9 +57,6 @@
<ClInclude Include="eyemBarCode.h"> <ClInclude Include="eyemBarCode.h">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="eyemEDLinesDetector.h">
<Filter>源文件</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="eyemLib.cpp"> <ClCompile Include="eyemLib.cpp">
...@@ -113,9 +110,6 @@ ...@@ -113,9 +110,6 @@
<ClCompile Include="eyemBarCode.cpp"> <ClCompile Include="eyemBarCode.cpp">
<Filter>源文件</Filter> <Filter>源文件</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="eyemEDLinesDetector.cpp">
<Filter>源文件</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ResourceCompile Include="eyemLib.rc"> <ResourceCompile Include="eyemLib.rc">
......
#include "eyemMath.h" #include "eyemMath.h"
double eyemMathCalcInnerProduct(int, double[], double[]); double eyemMathCalcInnerProduct(int, double[], double[]);
void eyemMathCalcOuterProduct(double[], double[], double[]); void eyemMathCalcOuterProduct(double[], double[], double[]);
int eyemMathCalcAngle(int, double[], double[], double *); int eyemMathCalcAngle(int, double[], double[], double *);
double eyemMathCalcNorm(int, double[]); double eyemMathCalcNorm(int, double[]);
double eyemMathCalcArgument(double[]); double eyemMathCalcArgument(double[]);
int eyemMathNormalization(int, double[]); int eyemMathNormalization(int, double[]);
int eyemMathStat(int, double[], double *, double *, double *); int eyemMathStat(int, double[], double *, double *, double *);
double eyemMathMedianI(int, int *); double eyemMathMedianI(int, int *);
double eyemMathMedianD(int, double *); double eyemMathMedianD(int, double *);
int eyemMathOtsuThreshold1d(int, double[], double *); int eyemMathOtsuThreshold1d(int, double[], double *);
double eyemMathAreaTriangle(double, double, double, double, double, double); double eyemMathAreaTriangle(double, double, double, double, double, double);
double eyemMathSignAreaTriangle(double, double, double, double, double, double); double eyemMathSignAreaTriangle(double, double, double, double, double, double);
void eyemMathRotatePoint(double, double, double, double, double, double *, double *); void eyemMathRotatePoint(double, double, double, double, double, double *, double *);
void eyemMathCreateTransParam(int, double, double, double, double, double *, double *, double *); void eyemMathCreateTransParam(int, double, double, double, double, double *, double *, double *);
void eyemMathTransCoordOfPoint(double, double, double, double, double, double *, double *); void eyemMathTransCoordOfPoint(double, double, double, double, double, double *, double *);
void eyemMathInvTransCoordOfPoint(double, double, double, double, double, double *, double *); void eyemMathInvTransCoordOfPoint(double, double, double, double, double, double *, double *);
void eyemMathComposeCoord(double, double, double, double, double, double, double *, double *, double *); void eyemMathComposeCoord(double, double, double, double, double, double, double *, double *, double *);
double eyemMathInvMatrixOfSyn3X3(double[][3], double[][3]); double eyemMathInvMatrixOfSyn3X3(double[][3], double[][3]);
void eyemMathInvCoord(double, double, double, double *, double *, double *); void eyemMathInvCoord(double, double, double, double *, double *, double *);
double eyemMathGetDistFromPointToPoint(double, double, double, double); double eyemMathGetDistFromPointToPoint(double, double, double, double);
double eyemMathGetDistFromPointToLine(double, double, double, double, double); double eyemMathGetDistFromPointToLine(double, double, double, double, double);
double eyemMathGetDistAndCrossPointFromPointToLine(double, double, double, double, double, double *, double *); double eyemMathGetDistAndCrossPointFromPointToLine(double, double, double, double, double, double *, double *);
double eyemMathGetDistFromPointToCircle(double, double, double, double, double, double *, double *); double eyemMathGetDistFromPointToCircle(double, double, double, double, double, double *, double *);
int eyemMathGetDistFromPointToEllipse(double, double, double, double, double, double, double, double *, double *, double *); int eyemMathGetDistFromPointToEllipse(double, double, double, double, double, double, double, double *, double *, double *);
int eyemMathCrossPoint(double, double, double, double, double, double, double *, double *); int eyemMathCrossPoint(double, double, double, double, double, double, double *, double *);
void eyemMathTransAbcToRq(double, double, double, double *, double *); void eyemMathTransAbcToRq(double, double, double, double *, double *);
double eyemMathCrossAngle(double, double, double, double, double, double); double eyemMathCrossAngle(double, double, double, double, double, double);
int eyemMathGetLineFrom2Points(double, double, double, double, double *, double *, double *); int eyemMathGetLineFrom2Points(double, double, double, double, double *, double *, double *);
void eyemMathGetOrthogonalLineFromLineAndPoint(double, double, double, double, double *, double *, double *); void eyemMathGetOrthogonalLineFromLineAndPoint(double, double, double, double, double *, double *, double *);
int eyemMathCheckAngle(double, double, double); int eyemMathCheckAngle(double, double, double);
double eyemMathAddAngle(int, int, double, double); double eyemMathAddAngle(int, int, double, double);
double eyemMathPrimeAngle(int, int, double); double eyemMathPrimeAngle(int, int, double);
double eyemMathExtremumOfQuadraticCurves(double, double, double, double *); double eyemMathExtremumOfQuadraticCurves(double, double, double, double *);
double eyemMathExtremumOfQuadraticSurface(double, double, double, double, double, double, double *, double *); double eyemMathExtremumOfQuadraticSurface(double, double, double, double, double, double, double *, double *);
double eyemMathCrossCorrelation(int, double[], double[]); double eyemMathCrossCorrelation(int, double[], double[]);
int eyemMathAutoCorrelation(int, double[], int, double[]); int eyemMathAutoCorrelation(int, double[], int, double[]);
double eyemMathNormCorrelation(int, double[], double[]); double eyemMathNormCorrelation(int, double[], double[]);
int eyemMathNormAutoCorrelation(int, double[], int, double[]); int eyemMathNormAutoCorrelation(int, double[], int, double[]);
int eyemMathSearchOf1DWithNormCorrelation(int, double[], int, double[], int *, double *); int eyemMathSearchOf1DWithNormCorrelation(int, double[], int, double[], int *, double *);
int eyemMathQuadraticRoots(double[], double[]); int eyemMathQuadraticRoots(double[], double[]);
int eyemMathCubicRoots(double[], double[]); int eyemMathCubicRoots(double[], double[]);
int eyemMathQuarticRoots(double[], double[]); int eyemMathQuarticRoots(double[], double[]);
double eyemMathHorner(int, double[], double); double eyemMathHorner(int, double[], double);
void eyemMathTransCoord(double, double, double, double, double, double *, double *); void eyemMathTransCoord(double, double, double, double, double, double *, double *);
\ No newline at end of file \ No newline at end of file
1>------ 已启动生成: 项目: eyemLib, 配置: Debug x64 ------
1> eyemSmooth.cpp
1> eyemMath.cpp
1> eyemMat.cpp
1> eyemGeneric.cpp
1> eyemFit.cpp
1> eyemEdge1d.cpp
1> eyemEdge.cpp
1> eyemClp2d.cpp
1> eyemBin.cpp
1> eyemBarCode.cpp
1> 正在生成代码...
1> 正在跳过...(未检测到相关更改)
1> eyemMisc.cpp
1> eyemLib.cpp
1> eyemCalib.cpp
1> 正在创建库 C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\x64\Debug\eyemLib.lib 和对象 C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\x64\Debug\eyemLib.exp
1> eyemLib.vcxproj -> C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\x64\Debug\eyemLib.dll
1> eyemLib.vcxproj -> C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\x64\Debug\eyemLib.pdb (Full PDB)
2>------ 已启动生成: 项目: eyemLib-Sharp, 配置: Debug Any CPU ------
2>C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\eyemLib-Sharp\EyemLib.cs(719,23,719,29): warning CS0219: The variable 'image2' is assigned but its value is never used
2>C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\eyemLib-Sharp\EyemLib.cs(894,20,894,27): warning CS0219: The variable 'pNumObj' is assigned but its value is never used
2> eyemLib-Sharp -> C:\Users\张士柳\OneDrive\程序\VSProject\eyemLib\x64\Debug\eyemLib-Sharp.exe
========== 生成: 成功 2 个,失败 0 个,最新 0 个,跳过 0 个 ==========
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!