Commit 75b7b0d3 张士柳

1 个父辈 9b0890d9
...@@ -851,7 +851,6 @@ namespace eyemLib_Sharp ...@@ -851,7 +851,6 @@ namespace eyemLib_Sharp
{ {
EyemImage image; EyemImage image;
EyemImage tpDstImg = new EyemImage(); EyemImage tpDstImg = new EyemImage();
//int flag = eyemImageRead("1.png", -1, out image);
//int flag = eyemImageReadRaw(fileName, 3072, 3072, 2, out ucpImage); //int flag = eyemImageReadRaw(fileName, 3072, 3072, 2, out ucpImage);
int flag = eyemImageRead(fileName, -1, out image); int flag = eyemImageRead(fileName, -1, out image);
if (flag != 0) if (flag != 0)
...@@ -862,6 +861,10 @@ namespace eyemLib_Sharp ...@@ -862,6 +861,10 @@ namespace eyemLib_Sharp
Stopwatch sw = new Stopwatch(); Stopwatch sw = new Stopwatch();
sw.Restart(); sw.Restart();
//Bitmap bit = new Bitmap("D:\\批量测试图像\\clamp_sloped_29.png");
//EyemImage test = eyemCvtToEyemImage(bit);
//flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "uint16_t", out image1); //flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "uint16_t", out image1);
//flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "int8_t", out image2); //flag = eyemImageMalloc(image.iWidth, image.iHeight, 1, "int8_t", out image2);
...@@ -875,7 +878,7 @@ namespace eyemLib_Sharp ...@@ -875,7 +878,7 @@ namespace eyemLib_Sharp
//flag = eyemImageAbs(image1, ref tpDstImg); //flag = eyemImageAbs(image1, ref tpDstImg);
//flag = eyemLibImpl(image, out tpDstImg); //flag = eyemLibImpl(test, out tpDstImg);
//EyemOcsFXYR tpCircle = new EyemOcsFXYR(); //EyemOcsFXYR tpCircle = new EyemOcsFXYR();
//flag = eyemMarkerTracing(image, 130, ref tpCircle); //flag = eyemMarkerTracing(image, 130, ref tpCircle);
...@@ -1384,7 +1387,7 @@ namespace eyemLib_Sharp ...@@ -1384,7 +1387,7 @@ namespace eyemLib_Sharp
eyemImageFree(ref image); eyemImageFree(ref image);
} }
#region EyemImage转换成Bitmap #region EyemImageBitmap相互转换
public static Bitmap eyemCvtToBitmap(EyemImage tpImage) public static Bitmap eyemCvtToBitmap(EyemImage tpImage)
{ {
if (tpImage.vpImage == IntPtr.Zero || tpImage.iDepth != 0) if (tpImage.vpImage == IntPtr.Zero || tpImage.iDepth != 0)
...@@ -1444,6 +1447,54 @@ namespace eyemLib_Sharp ...@@ -1444,6 +1447,54 @@ namespace eyemLib_Sharp
} }
return bitmap; return bitmap;
} }
public static EyemImage eyemCvtToEyemImage(Bitmap bitmap)
{
EyemImage tpImage = new EyemImage();
//锁定数据区
BitmapData bd = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height),
ImageLockMode.ReadOnly, bitmap.PixelFormat);
switch (bitmap.PixelFormat)
{
case PixelFormat.Format8bppIndexed:
tpImage.iChannels = 1;
break;
case PixelFormat.Format24bppRgb:
tpImage.iChannels = 3;
break;
case PixelFormat.Format32bppArgb:
tpImage.iChannels = 4;
break;
default:
throw new Exception("Image formats are not supported");
}
//仅支持8位
tpImage.iDepth = 0;
//图像尺寸
tpImage.iWidth = bitmap.Width; tpImage.iHeight = bitmap.Height;
//分配内存(释放不是用eyemImageFree,用Marshal.FreeHGlobal(tpImage.vpImage))
tpImage.vpImage = Marshal.AllocHGlobal(bd.Stride * bd.Height);
try
{
int pd = ((tpImage.iWidth * tpImage.iChannels) + 3) / 4 * 4;
long bytesToCopy = tpImage.iWidth * tpImage.iChannels;
for (int y = 0; y < tpImage.iHeight; y++)
{
long offsetSrc = y * pd;
long offsetDst = y * tpImage.iWidth * tpImage.iChannels;
Buffer.MemoryCopy((byte*)(bd.Scan0.ToPointer()) + offsetSrc, (byte*)(tpImage.vpImage.ToPointer()) + offsetDst, bytesToCopy, bytesToCopy);
}
}
finally
{
bitmap.UnlockBits(bd);
}
return tpImage;
}
#endregion #endregion
#region 结构体转内存指针 #region 结构体转内存指针
......
...@@ -713,50 +713,50 @@ int eyemDetectAndDecodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *hObject, ...@@ -713,50 +713,50 @@ int eyemDetectAndDecodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *hObject,
auto results = detector->detectAndDecode(image, points, __points); auto results = detector->detectAndDecode(image, points, __points);
#pragma region discard #pragma region discard
if (image.channels() == 1) { //if (image.channels() == 1) {
cv::cvtColor(image, image, cv::COLOR_GRAY2BGR); // cv::cvtColor(image, image, cv::COLOR_GRAY2BGR);
} //}
else if (image.channels() == 4) { //else if (image.channels() == 4) {
cv::cvtColor(image, image, cv::COLOR_BGRA2BGR); // cv::cvtColor(image, image, cv::COLOR_BGRA2BGR);
} //}
cv::Mat showMat = image.clone(); //cv::Mat showMat = image.clone();
for (auto&point : __points) { //for (auto&point : __points) {
cv::rectangle(showMat, point, cv::Scalar(0, 0, 255), 2); // cv::rectangle(showMat, point, cv::Scalar(0, 0, 255), 2);
} //}
for (auto&point : points) { //for (auto&point : points) {
cv::rectangle(showMat, point, cv::Scalar(0, 255, 0), 2); // cv::rectangle(showMat, point, cv::Scalar(0, 255, 0), 2);
} //}
for (int c = 0; c < results.size(); c++) { //for (int c = 0; c < results.size(); c++) {
int baseLine; // int baseLine;
std::string label = results[c]; // std::string label = results[c];
cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine); // cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
cv::Scalar pal(0, 255, 0); // cv::Scalar pal(0, 255, 0);
cv::rectangle(showMat, cv::Point(points[c].tl().x, points[c].tl().y - labelSize.height - baseLine), cv::Point(points[c].tl().x + labelSize.width, points[c].tl().y), pal, cv::FILLED); // cv::rectangle(showMat, cv::Point(points[c].tl().x, points[c].tl().y - labelSize.height - baseLine), cv::Point(points[c].tl().x + labelSize.width, points[c].tl().y), pal, cv::FILLED);
cv::putText(showMat, label, cv::Point(points[c].tl().x, points[c].tl().y - baseLine), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0), 1); // cv::putText(showMat, label, cv::Point(points[c].tl().x, points[c].tl().y - baseLine), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0), 1);
} //}
///<输出结果图像 /////<输出结果图像
{ //{
tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels(); // tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels();
//内存尺寸 // //内存尺寸
int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t); // int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t);
//分配初始化内存 // //分配初始化内存
tpDstImg->vpImage = (uint8_t *)malloc(_Size); // tpDstImg->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImg->vpImage) // if (NULL == tpDstImg->vpImage)
return FUNC_NOT_ENOUGH_MEM; // return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg->vpImage, 0, _Size); // memset(tpDstImg->vpImage, 0, _Size);
//拷贝数据 // //拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size); // memcpy(tpDstImg->vpImage, showMat.data, _Size);
} //}
#pragma endregion #pragma endregion
//解码结果 //解码结果
...@@ -814,33 +814,33 @@ int eyemDetectAndDecodeBarcodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *h ...@@ -814,33 +814,33 @@ int eyemDetectAndDecodeBarcodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *h
#pragma region discard #pragma region discard
for (int c = 0; c < results.size(); c++) { //for (int c = 0; c < results.size(); c++) {
int baseLine; // int baseLine;
std::string label = results[c]; // std::string label = results[c];
cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine); // cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
cv::Scalar pal(0, 255, 255); // cv::Scalar pal(0, 255, 255);
cv::rectangle(showMat, cv::Point(points[c].x, points[c].y - labelSize.height - baseLine), cv::Point(points[c].x + labelSize.width, points[c].y), pal, cv::FILLED); // cv::rectangle(showMat, cv::Point(points[c].x, points[c].y - labelSize.height - baseLine), cv::Point(points[c].x + labelSize.width, points[c].y), pal, cv::FILLED);
cv::putText(showMat, label, cv::Point(points[c].x, points[c].y - baseLine), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0), 1); // cv::putText(showMat, label, cv::Point(points[c].x, points[c].y - baseLine), cv::FONT_HERSHEY_SIMPLEX, 0.5, cv::Scalar(0, 0, 0), 1);
} //}
///<输出结果图像 /////<输出结果图像
{ //{
tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels(); // tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels();
//内存尺寸 // //内存尺寸
int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t); // int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t);
//分配初始化内存 // //分配初始化内存
tpDstImg->vpImage = (uint8_t *)malloc(_Size); // tpDstImg->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImg->vpImage) // if (NULL == tpDstImg->vpImage)
return FUNC_NOT_ENOUGH_MEM; // return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg->vpImage, 0, _Size); // memset(tpDstImg->vpImage, 0, _Size);
//拷贝数据 // //拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size); // memcpy(tpDstImg->vpImage, showMat.data, _Size);
} //}
#pragma endregion #pragma endregion
//解码结果 //解码结果
......
...@@ -6274,11 +6274,9 @@ int eyemReleaseModel(IntPtr &hModelID) ...@@ -6274,11 +6274,9 @@ int eyemReleaseModel(IntPtr &hModelID)
int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, int iRoiNum, int *ipResults, EyemImage *tpDstImg) int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, int iRoiNum, int *ipResults, EyemImage *tpDstImg)
{ {
cv::Mat refImg(tpRefImg.iHeight, tpRefImg.iWidth, cv::Mat refImg = cv::Mat(tpRefImg.iHeight, tpRefImg.iWidth, MAKETYPE(tpRefImg.iDepth, tpRefImg.iChannels), tpRefImg.vpImage).clone();
MAKETYPE(tpRefImg.iDepth, tpRefImg.iChannels), tpRefImg.vpImage);
cv::Mat nextImg(tpNextImg.iHeight, tpNextImg.iWidth, cv::Mat nextImg = cv::Mat(tpNextImg.iHeight, tpNextImg.iWidth, MAKETYPE(tpNextImg.iDepth, tpNextImg.iChannels), tpNextImg.vpImage).clone();
MAKETYPE(tpNextImg.iDepth, tpNextImg.iChannels), tpNextImg.vpImage);
if (refImg.empty() | nextImg.empty()) if (refImg.empty() | nextImg.empty())
return FUNC_IMAGE_NOT_EXIST; return FUNC_IMAGE_NOT_EXIST;
...@@ -6317,7 +6315,7 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, ...@@ -6317,7 +6315,7 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois,
//寻找轮廓 //寻找轮廓
std::vector<std::vector<cv::Point>> contours; std::vector<std::vector<cv::Point>> contours;
cv::findContours(binary(cv::Rect(tpRois[i].iXs, tpRois[i].iYs, tpRois[i].iWidth, tpRois[i].iHeight)), contours, cv::RETR_TREE, cv::CHAIN_APPROX_NONE); cv::findContours(binary(cv::Rect(tpRois[i].iXs, tpRois[i].iYs, tpRois[i].iWidth, tpRois[i].iHeight)), contours, cv::RETR_TREE, cv::CHAIN_APPROX_SIMPLE);
//画图 //画图
for (int j = 0; j < contours.size(); j++) for (int j = 0; j < contours.size(); j++)
...@@ -6325,11 +6323,6 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, ...@@ -6325,11 +6323,6 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois,
cv::drawContours(showMat, contours, j, cv::Scalar(0, 0, 255), 3, 8, cv::noArray(), 2147483647, cv::Point(tpRois[i].iXs, tpRois[i].iYs)); cv::drawContours(showMat, contours, j, cv::Scalar(0, 0, 255), 3, 8, cv::noArray(), 2147483647, cv::Point(tpRois[i].iXs, tpRois[i].iYs));
} }
} }
//cv::imshow("eyemLib", showMat);
//cv::waitKey(1);
///<输出结果图像 ///<输出结果图像
{ {
tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels(); tpDstImg->iWidth = showMat.cols; tpDstImg->iHeight = showMat.rows; tpDstImg->iDepth = showMat.depth(); tpDstImg->iChannels = showMat.channels();
...@@ -6346,7 +6339,6 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, ...@@ -6346,7 +6339,6 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois,
//拷贝数据 //拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size); memcpy(tpDstImg->vpImage, showMat.data, _Size);
} }
return FUNC_OK; return FUNC_OK;
} }
...@@ -6496,9 +6488,16 @@ int eyemMarkerTracing(EyemImage tpImage, double dThreshold, EyemOcsFXYR *tpCircl ...@@ -6496,9 +6488,16 @@ int eyemMarkerTracing(EyemImage tpImage, double dThreshold, EyemOcsFXYR *tpCircl
tpCircle->fY = (float)afas[0].tpCircle.dY; tpCircle->fY = (float)afas[0].tpCircle.dY;
tpCircle->fR = (float)afas[0].tpCircle.dR; tpCircle->fR = (float)afas[0].tpCircle.dR;
//#ifdef _DEBUG //#ifdef _DEBUG
// cv::circle(backup, cv::Point(tpCircle->fX, tpCircle->fY), tpCircle->fR, cv::Scalar(0, 255, 0)); // cv::circle(backup, cv::Point(tpCircle->fX, tpCircle->fY), tpCircle->fR, cv::Scalar(0, 255, 0));
//#endif //#endif
return FUNC_OK;
}
int eyemMultFuncImpl(EyemImage tpImage, EyemRect tpRoi, const char *funcName, double dThreshold, EyemOcsFXY *tpCircle, EyemImage *tpDstImg)
{
return FUNC_OK; return FUNC_OK;
} }
......
#include "yoloWrapper.h" #include "yoloWrapper.h"
int YoloWrapper::init(const cv::String& detector_config_path, int YoloWrapper::init(const cv::String& detector_config_path,
const cv::String& detector_model_path) { const cv::String& detector_model_path) {
if (!detector_config_path.empty() && !detector_model_path.empty()) { if (!detector_config_path.empty() && !detector_model_path.empty()) {
...@@ -12,7 +11,6 @@ int YoloWrapper::init(const cv::String& detector_config_path, ...@@ -12,7 +11,6 @@ int YoloWrapper::init(const cv::String& detector_config_path,
return 0; return 0;
} }
std::vector<cv::Rect> YoloWrapper::forward(cv::Mat img) { std::vector<cv::Rect> YoloWrapper::forward(cv::Mat img) {
//获取输出层名称 //获取输出层名称
auto layerNames = net_.getLayerNames(); auto layerNames = net_.getLayerNames();
......
...@@ -13,7 +13,7 @@ class YoloWrapper ...@@ -13,7 +13,7 @@ class YoloWrapper
{ {
public: public:
YoloWrapper() {}; YoloWrapper() {};
~YoloWrapper() { }; ~YoloWrapper() {};
int init(const std::string& config_path, const std::string& model_path); int init(const std::string& config_path, const std::string& model_path);
std::vector<cv::Rect> forward(cv::Mat img); std::vector<cv::Rect> forward(cv::Mat img);
private: private:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!