Commit a0a89200 LN

1.出料4处料盘识别优化了下。2.主界面显示 保存扫码图片的复选框,勾选后会报错扫码失败的照片,方便查找皮带线扫码失败原因

1 个父辈 d31df789
...@@ -207,7 +207,7 @@ ...@@ -207,7 +207,7 @@
this.chbSaveImage.TabIndex = 203; this.chbSaveImage.TabIndex = 203;
this.chbSaveImage.Text = "保存扫码图片"; this.chbSaveImage.Text = "保存扫码图片";
this.chbSaveImage.UseVisualStyleBackColor = true; this.chbSaveImage.UseVisualStyleBackColor = true;
this.chbSaveImage.Visible = false; this.chbSaveImage.Visible = true;
this.chbSaveImage.CheckedChanged += new System.EventHandler(this.chbSaveImage_CheckedChanged); this.chbSaveImage.CheckedChanged += new System.EventHandler(this.chbSaveImage_CheckedChanged);
// //
// groupBox1 // groupBox1
......
...@@ -1318,6 +1318,7 @@ namespace OnlineStore.AssemblyLine ...@@ -1318,6 +1318,7 @@ namespace OnlineStore.AssemblyLine
private void btnClear_Click(object sender, EventArgs e) private void btnClear_Click(object sender, EventArgs e)
{ {
//EyemManager.ReelCheck(null);
int num = (int)numTrayNum.Value; int num = (int)numTrayNum.Value;
if (num < 0) if (num < 0)
{ {
......
...@@ -41,20 +41,24 @@ namespace OnlineStore.DeviceLibrary ...@@ -41,20 +41,24 @@ namespace OnlineStore.DeviceLibrary
{ {
try try
{ {
Bitmap b = GetReducedImage(a, a.Width, a.Height); //string defI = @"D:\出料-4-20230519-110337371.bmp";
//a.Dispose(); //if (a == null&&File.Exists(defI))
//{
// a = new Bitmap(defI);
//}
//Bitmap b = GetReducedImage(a, a.Width, a.Height);
EyemImage image = new EyemImage();
image.iWidth = b.Width;
image.iHeight = b.Height;
image.iChannels = 4;
image.iDepth = 0;
//b.Dispose();
//b = new Bitmap("temp.bmp");
//eyemImageRead("temp.bmp", -1, out EyemImage image);
var bl = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, b.PixelFormat);
image.ucpImage = bl.Scan0;
//EyemImage image = new EyemImage();
//image.iWidth = b.Width;
//image.iHeight = b.Height;
//image.iChannels = b.Channels.;
//image.iDepth = 0;
//var bl = b.LockBits(new Rectangle(0, 0, b.Width, b.Height), ImageLockMode.ReadOnly, b.PixelFormat);
//image.ucpImage = bl.Scan0;
EyemImage image = eyemCvtToEyemImage2(a);
int ipNum; int ipNum;
BboxContainer bboxes = new BboxContainer(); BboxContainer bboxes = new BboxContainer();
eyemNNDetector(image, out ipNum, ref bboxes, out EyemImage tpDstImg); eyemNNDetector(image, out ipNum, ref bboxes, out EyemImage tpDstImg);
...@@ -63,14 +67,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -63,14 +67,14 @@ namespace OnlineStore.DeviceLibrary
if (record) if (record)
{ {
var c = eyemCvtToBitmap(tpDstImg); var c = eyemCvtToBitmap(tpDstImg);
b.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.jpg"); a.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}.jpg");
c.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}_m.jpg"); c.Save($"CameraDebug\\{DateTime.Now:yyyy-MM-dd-HH-mm-ss}_m.jpg");
c.Dispose(); c.Dispose();
} }
eyemImageFree(ref tpDstImg); eyemImageFree(ref tpDstImg);
//eyemImageFree(ref image); eyemImageFree(ref image);
b.UnlockBits(bl); //b.UnlockBits(bl);
b.Dispose(); //b.Dispose();
//for (int i = 0; i < ipNum; i++) //for (int i = 0; i < ipNum; i++)
//{ } //{ }
...@@ -85,6 +89,53 @@ namespace OnlineStore.DeviceLibrary ...@@ -85,6 +89,53 @@ namespace OnlineStore.DeviceLibrary
} }
return false; return false;
} }
public unsafe static EyemImage eyemCvtToEyemImage2(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;
case PixelFormat.Format32bppRgb:
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;
//分配内存
tpImage.ucpImage = eyemMallocMemBlock(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.ucpImage.ToPointer()) + offsetDst, bytesToCopy, bytesToCopy);
}
}
finally
{
bitmap.UnlockBits(bd);
}
return tpImage;
}
#region 通用 #region 通用
//读取图像,支持彩色与多深度 //读取图像,支持彩色与多深度
...@@ -113,6 +164,14 @@ namespace OnlineStore.DeviceLibrary ...@@ -113,6 +164,14 @@ namespace OnlineStore.DeviceLibrary
private static extern int eyemNNDetector(EyemImage tpImage, out int ipNum, ref BboxContainer container, out EyemImage tpDstImg); private static extern int eyemNNDetector(EyemImage tpImage, out int ipNum, ref BboxContainer container, out EyemImage tpDstImg);
[DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)] [DllImport("eyemLib.dll", CharSet = CharSet.None, CallingConvention = CallingConvention.Cdecl)]
private static extern int eyemNNDetectorParams(float fConfidence, float fNMSThreshold); private static extern int eyemNNDetectorParams(float fConfidence, float fNMSThreshold);
/// <summary>
/// 从进程中的非托管内存分配指定长度的内存
/// </summary>
/// <param name="cb">长度</param>
/// <returns>指向新分配的内存指针</returns>
[DllImport("eyemLib.dll", CallingConvention = CallingConvention.Cdecl)]
private static extern IntPtr eyemMallocMemBlock(int cb);
#endregion #endregion
#region 结构体 #region 结构体
//图像信息 //图像信息
......
支持 Markdown 格式
你添加了 0 到此讨论。请谨慎行事。
Finish editing this message first!