Commit 75b7b0d3 张士柳

1 个父辈 9b0890d9
......@@ -851,7 +851,6 @@ namespace eyemLib_Sharp
{
EyemImage image;
EyemImage tpDstImg = new EyemImage();
//int flag = eyemImageRead("1.png", -1, out image);
//int flag = eyemImageReadRaw(fileName, 3072, 3072, 2, out ucpImage);
int flag = eyemImageRead(fileName, -1, out image);
if (flag != 0)
......@@ -862,6 +861,10 @@ namespace eyemLib_Sharp
Stopwatch sw = new Stopwatch();
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, "int8_t", out image2);
......@@ -875,7 +878,7 @@ namespace eyemLib_Sharp
//flag = eyemImageAbs(image1, ref tpDstImg);
//flag = eyemLibImpl(image, out tpDstImg);
//flag = eyemLibImpl(test, out tpDstImg);
//EyemOcsFXYR tpCircle = new EyemOcsFXYR();
//flag = eyemMarkerTracing(image, 130, ref tpCircle);
......@@ -1384,7 +1387,7 @@ namespace eyemLib_Sharp
eyemImageFree(ref image);
}
#region EyemImage转换成Bitmap
#region EyemImageBitmap相互转换
public static Bitmap eyemCvtToBitmap(EyemImage tpImage)
{
if (tpImage.vpImage == IntPtr.Zero || tpImage.iDepth != 0)
......@@ -1444,6 +1447,54 @@ namespace eyemLib_Sharp
}
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
#region 结构体转内存指针
......
......@@ -713,50 +713,50 @@ int eyemDetectAndDecodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *hObject,
auto results = detector->detectAndDecode(image, points, __points);
#pragma region discard
if (image.channels() == 1) {
cv::cvtColor(image, image, cv::COLOR_GRAY2BGR);
}
else if (image.channels() == 4) {
cv::cvtColor(image, image, cv::COLOR_BGRA2BGR);
}
cv::Mat showMat = image.clone();
for (auto&point : __points) {
cv::rectangle(showMat, point, cv::Scalar(0, 0, 255), 2);
}
for (auto&point : points) {
cv::rectangle(showMat, point, cv::Scalar(0, 255, 0), 2);
}
for (int c = 0; c < results.size(); c++) {
int baseLine;
std::string label = results[c];
cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
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::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();
//内存尺寸
int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t);
//分配初始化内存
tpDstImg->vpImage = (uint8_t *)malloc(_Size);
if (NULL == tpDstImg->vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg->vpImage, 0, _Size);
//拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size);
}
//if (image.channels() == 1) {
// cv::cvtColor(image, image, cv::COLOR_GRAY2BGR);
//}
//else if (image.channels() == 4) {
// cv::cvtColor(image, image, cv::COLOR_BGRA2BGR);
//}
//cv::Mat showMat = image.clone();
//for (auto&point : __points) {
// cv::rectangle(showMat, point, cv::Scalar(0, 0, 255), 2);
//}
//for (auto&point : points) {
// cv::rectangle(showMat, point, cv::Scalar(0, 255, 0), 2);
//}
//for (int c = 0; c < results.size(); c++) {
// int baseLine;
// std::string label = results[c];
// cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
// 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::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();
// //内存尺寸
// int _Size = tpDstImg->iWidth*tpDstImg->iHeight*tpDstImg->iChannels * sizeof(uint8_t);
// //分配初始化内存
// tpDstImg->vpImage = (uint8_t *)malloc(_Size);
// if (NULL == tpDstImg->vpImage)
// return FUNC_NOT_ENOUGH_MEM;
// memset(tpDstImg->vpImage, 0, _Size);
// //拷贝数据
// memcpy(tpDstImg->vpImage, showMat.data, _Size);
//}
#pragma endregion
//解码结果
......@@ -814,33 +814,33 @@ int eyemDetectAndDecodeBarcodeUseNN(EyemImage tpImage, EyemRect tpRoi, IntPtr *h
#pragma region discard
for (int c = 0; c < results.size(); c++) {
int baseLine;
std::string label = results[c];
cv::Size labelSize = cv::getTextSize(label, cv::FONT_HERSHEY_SIMPLEX, 0.5, 1, &baseLine);
//for (int c = 0; c < results.size(); c++) {
// int baseLine;
// std::string label = results[c];
// 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::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::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);
//}
///<输出结果图像
{
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);
if (NULL == tpDstImg->vpImage)
return FUNC_NOT_ENOUGH_MEM;
memset(tpDstImg->vpImage, 0, _Size);
// //分配初始化内存
// tpDstImg->vpImage = (uint8_t *)malloc(_Size);
// if (NULL == tpDstImg->vpImage)
// return FUNC_NOT_ENOUGH_MEM;
// memset(tpDstImg->vpImage, 0, _Size);
//拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size);
}
// //拷贝数据
// memcpy(tpDstImg->vpImage, showMat.data, _Size);
//}
#pragma endregion
//解码结果
......
......@@ -6274,11 +6274,9 @@ int eyemReleaseModel(IntPtr &hModelID)
int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois, int iRoiNum, int *ipResults, EyemImage *tpDstImg)
{
cv::Mat refImg(tpRefImg.iHeight, tpRefImg.iWidth,
MAKETYPE(tpRefImg.iDepth, tpRefImg.iChannels), tpRefImg.vpImage);
cv::Mat refImg = cv::Mat(tpRefImg.iHeight, tpRefImg.iWidth, MAKETYPE(tpRefImg.iDepth, tpRefImg.iChannels), tpRefImg.vpImage).clone();
cv::Mat nextImg(tpNextImg.iHeight, tpNextImg.iWidth,
MAKETYPE(tpNextImg.iDepth, tpNextImg.iChannels), tpNextImg.vpImage);
cv::Mat nextImg = cv::Mat(tpNextImg.iHeight, tpNextImg.iWidth, MAKETYPE(tpNextImg.iDepth, tpNextImg.iChannels), tpNextImg.vpImage).clone();
if (refImg.empty() | nextImg.empty())
return FUNC_IMAGE_NOT_EXIST;
......@@ -6317,7 +6315,7 @@ int eyemTrackFeature(EyemImage tpRefImg, EyemImage tpNextImg, EyemRect3 *tpRois,
//寻找轮廓
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++)
......@@ -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::imshow("eyemLib", showMat);
//cv::waitKey(1);
///<输出结果图像
{
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,
//拷贝数据
memcpy(tpDstImg->vpImage, showMat.data, _Size);
}
return FUNC_OK;
}
......@@ -6496,9 +6488,16 @@ int eyemMarkerTracing(EyemImage tpImage, double dThreshold, EyemOcsFXYR *tpCircl
tpCircle->fY = (float)afas[0].tpCircle.dY;
tpCircle->fR = (float)afas[0].tpCircle.dR;
//#ifdef _DEBUG
// cv::circle(backup, cv::Point(tpCircle->fX, tpCircle->fY), tpCircle->fR, cv::Scalar(0, 255, 0));
//#endif
//#ifdef _DEBUG
// cv::circle(backup, cv::Point(tpCircle->fX, tpCircle->fY), tpCircle->fR, cv::Scalar(0, 255, 0));
//#endif
return FUNC_OK;
}
int eyemMultFuncImpl(EyemImage tpImage, EyemRect tpRoi, const char *funcName, double dThreshold, EyemOcsFXY *tpCircle, EyemImage *tpDstImg)
{
return FUNC_OK;
}
......
#include "yoloWrapper.h"
int YoloWrapper::init(const cv::String& detector_config_path,
const cv::String& detector_model_path) {
if (!detector_config_path.empty() && !detector_model_path.empty()) {
......@@ -12,7 +11,6 @@ int YoloWrapper::init(const cv::String& detector_config_path,
return 0;
}
std::vector<cv::Rect> YoloWrapper::forward(cv::Mat img) {
//获取输出层名称
auto layerNames = net_.getLayerNames();
......
......@@ -13,7 +13,7 @@ class YoloWrapper
{
public:
YoloWrapper() {};
~YoloWrapper() { };
~YoloWrapper() {};
int init(const std::string& config_path, const std::string& model_path);
std::vector<cv::Rect> forward(cv::Mat img);
private:
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!