展示实时旋钮图片

This commit is contained in:
820689062 2024-07-29 17:35:37 +08:00
parent 71997776cf
commit df358a4e3a
2 changed files with 75 additions and 20 deletions

View File

@ -194,6 +194,7 @@
timer6 = new System.Windows.Forms.Timer(components);
richTextBox1 = new RichTextBox();
backgroundWorker1 = new System.ComponentModel.BackgroundWorker();
pictureBox1 = new PictureBox();
tabPage2.SuspendLayout();
panel1.SuspendLayout();
groupBox5.SuspendLayout();
@ -218,6 +219,7 @@
tabPage3.SuspendLayout();
panel2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)InsertDataDgv).BeginInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).BeginInit();
SuspendLayout();
//
// tabPage2
@ -1223,15 +1225,15 @@
// DevNameCombo
//
DevNameCombo.FormattingEnabled = true;
DevNameCombo.Location = new Point(7, 33);
DevNameCombo.Location = new Point(8, 33);
DevNameCombo.Margin = new Padding(4, 2, 4, 2);
DevNameCombo.Name = "DevNameCombo";
DevNameCombo.Size = new Size(386, 33);
DevNameCombo.Size = new Size(524, 33);
DevNameCombo.TabIndex = 1;
//
// ScanDevList
//
ScanDevList.Location = new Point(424, 32);
ScanDevList.Location = new Point(557, 33);
ScanDevList.Margin = new Padding(4, 2, 4, 2);
ScanDevList.Name = "ScanDevList";
ScanDevList.Size = new Size(94, 35);
@ -1243,6 +1245,7 @@
// groupBox2
//
groupBox2.AutoSize = true;
groupBox2.Controls.Add(pictureBox1);
groupBox2.Controls.Add(canvas3);
groupBox2.Controls.Add(canvas2);
groupBox2.Controls.Add(canvas1);
@ -1376,6 +1379,7 @@
groupBox8.Controls.Add(label35);
groupBox8.Location = new Point(11, 326);
groupBox8.Name = "groupBox8";
groupBox8.RightToLeft = RightToLeft.No;
groupBox8.Size = new Size(596, 462);
groupBox8.TabIndex = 24;
groupBox8.TabStop = false;
@ -1627,10 +1631,10 @@
// tabPage3
//
tabPage3.Controls.Add(panel2);
tabPage3.Location = new Point(4, 34);
tabPage3.Location = new Point(4, 33);
tabPage3.Margin = new Padding(4, 2, 4, 2);
tabPage3.Name = "tabPage3";
tabPage3.Size = new Size(1276, 815);
tabPage3.Size = new Size(1276, 816);
tabPage3.TabIndex = 4;
tabPage3.Text = "录入新型号";
tabPage3.UseVisualStyleBackColor = true;
@ -1950,6 +1954,16 @@
richTextBox1.TabIndex = 1;
richTextBox1.Text = "";
//
// pictureBox1
//
pictureBox1.Location = new Point(367, 454);
pictureBox1.Margin = new Padding(4, 2, 4, 2);
pictureBox1.Name = "pictureBox1";
pictureBox1.Size = new Size(284, 202);
pictureBox1.SizeMode = PictureBoxSizeMode.CenterImage;
pictureBox1.TabIndex = 12;
pictureBox1.TabStop = false;
//
// MainForm
//
AutoScaleDimensions = new SizeF(12F, 25F);
@ -1999,6 +2013,7 @@
panel2.ResumeLayout(false);
panel2.PerformLayout();
((System.ComponentModel.ISupportInitialize)InsertDataDgv).EndInit();
((System.ComponentModel.ISupportInitialize)pictureBox1).EndInit();
ResumeLayout(false);
}
@ -2184,5 +2199,6 @@
private TextBox textBox4;
private Label label36;
private Label label37;
private PictureBox pictureBox1;
}
}

View File

@ -3415,24 +3415,19 @@ namespace HisenceYoloDetection
Rect rectsql = CheckDiffSciHelper.strChangeRect(SQlxK_HisenceWord.TwoRect);
Rect rectDet = CheckDiffSciHelper.strChangeRect(xK_HisenceWord.TwoRect);
bool iswhite = IsMostlyWhite(PathSql);
int centerX = rectsql.X + rectsql.Width / 2;
int centerY = rectsql.Y + rectsql.Height / 2;
// 确定新的矩形框的左上角坐标和宽高
int rectSize = 60; // 30像素向外拓展
int rectX = Math.Max(0, centerX - rectSize / 2);
int rectY = Math.Max(0, centerY - rectSize / 2);
int rectWidth = Math.Min(rectSize, rectsql.Width - rectX);
int rectHeight = Math.Min(rectSize, rectsql.Height - rectY);
// 创建新的矩形框
Rect newRect = new Rect(rectX, rectY, rectWidth, rectHeight);
string color = BtnColor(CutBlockMat, newRect);
bool iswhite = IsMostlyWhite(PathSql);//判断数据库模板块背景色
Mat SqlImg= Cv2.ImRead(PathSql);
Mat SqlBtn = GetCroppedImage(SqlImg, rectsql);
Mat BtnImg = GetCroppedImage(CutBlockMat, rectDet);//截取实时图像旋钮图片
Bitmap bitmap = MatToBitmap(BtnImg);
pictureBox1.Image = bitmap;//展示实时旋钮图片
Rect newRect = GetCenterCroppedRect(SqlBtn, 30);
string color = BtnColor(SqlBtn, newRect);
this.Invoke(new Action(() =>
{
textBox2.Text = color;
textBox2.Text = color;//数据库旋钮颜色
}));
Mat matresult = CutBlockMat.Clone();
@ -3694,7 +3689,32 @@ namespace HisenceYoloDetection
// 如果黑色比例大于等于0.6返回false否则返回true
return blackRatio < 0.6;
}
//Mat 转Bitmap
private Bitmap MatToBitmap(Mat mat)
{
// Convert OpenCV Mat to Bitmap
Bitmap bitmap;
using (var ms = new System.IO.MemoryStream(mat.ToBytes()))
{
bitmap = new Bitmap(ms);
}
return bitmap;
}
static Mat GetCroppedImage(Mat picture, Rect rectDet)
{
// 确保 rectDet 在 picture 范围内
Rect validRect = new Rect(
Math.Max(rectDet.X, 0),
Math.Max(rectDet.Y, 0),
Math.Min(rectDet.Width, picture.Width - rectDet.X),
Math.Min(rectDet.Height, picture.Height - rectDet.Y)
);
// 提取指定区域的子图像
Mat croppedImage = new Mat(picture, validRect);
return croppedImage;
}
private void bnGetParam2_Click_1(object sender, EventArgs e)
{
// tbExposure2.Text = Cam2.dvpGetExposure().ToString();
@ -3736,7 +3756,26 @@ namespace HisenceYoloDetection
myLog("X轴停止归零", DateTime.Now);
}
}
//截取中心点四周的矩形框(防止按钮四周不同颜色的影响)
private Rect GetCenterCroppedRect(Mat picture, int borderSize)
{
// 获取图像尺寸
int width = picture.Width;
int height = picture.Height;
// 计算裁剪区域的矩形框
int newWidth = width - 2 * borderSize;
int newHeight = height - 2 * borderSize;
int x = borderSize;
int y = borderSize;
// 确保裁剪区域在图像范围内
Rect validRect = new Rect(x, y, newWidth, newHeight);
validRect = validRect & new Rect(0, 0, width, height);
return validRect;
}
//获取区域旋钮颜色
static string BtnColor(Mat img, Rect rect)
{
// 提取指定区域