chagola 2024-07-18 11:29 采纳率: 100%
浏览 114
已结题

C#小桌面程序调试出错,请帮解决

我用VS Community 2022编一个小的桌面程序,C#语言,代码调试时出错,只有Form1.cs和Form1.designer.cs文件,总共约200行代码,我怀疑是否引用的EmguCV设置有问题,还是别的问题,希望远程帮我解决一下。

-----------------------------这是Form1.cs

using System;
using System.Drawing;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.CV.CvEnum;
using System.Numerics;

namespace ImageMeasurementApp
{
    public partial class Form1 : Form
    {
        private Image<Bgr, byte> _originalImage; // 原始图像
        private Image<Gray, byte> _grayImage; // 灰度图像
        private Image<Gray, byte> _thresholdImage; // 二值化图像
        private Image<Bgr, byte> _resultImage; // 结果图像,用于显示轮廓和尺寸
        private VectorOf<VectorOf<Point>> _contours; // 所有检测到的轮廓

        public Form1()
        {
            InitializeComponent(); // 初始化组件,由设计器生成
            pictureBox1.Image = new Image<Bgr, byte>(pictureBox1.Width, pictureBox1.Height); // 初始化 pictureBox1 的 Image 属性
            pictureBox1.MouseMove += PictureBox1_MouseMove;
        }

        // 加载图像按钮的事件处理器
        private void LoadImageButton_Click(object sender, EventArgs e)
        {
            using (OpenFileDialog openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Filter = "Image Files (*.bmp;*.jpg;*.jpeg,*.png)|*.BMP;*.JPG;*.JPEG;*.PNG";
                if (openFileDialog.ShowDialog() == DialogResult.OK)
                {
                    _originalImage = new Image<Bgr, byte>(openFileDialog.FileName);
                    _grayImage = _originalImage.Convert<Gray, byte>();
                    pictureBox1.Image = _originalImage;
                }
            }
        }

        // 二值化处理按钮的事件处理器
        private void ThresholdImageButton_Click(object sender, EventArgs e)
        {
            if (_grayImage != null)
            {
                _thresholdImage = _grayImage.ThresholdBinary(new Gray(128), new Gray(255));
                pictureBox1.Image = _thresholdImage;
            }
        }

        // 检测轮廓按钮的事件处理器
        private void DetectContoursButton_Click(object sender, EventArgs e)
        {
            if (_thresholdImage != null)
            {
                _resultImage = _originalImage.Copy();
                _contours = new VectorOf<VectorOf<Point>>();
                CvInvoke.FindContours(_thresholdImage, _contours, IntPtr.Zero, RetrType.List, ChainApproxMethod.ChainApproxSimple);

                foreach (VectorOf<Point> contour in _contours)
                {
                    if (contour.Size > 100)
                    {
                        Rectangle boundingRect = CvInvoke.BoundingRectangle(contour);
                        CvInvoke.DrawContours(_resultImage, contour, new MCvScalar(0, 0, 255), 2);
                        CvInvoke.Rectangle(_resultImage, boundingRect, new MCvScalar(0, 255, 0), 2);
                        double area = CvInvoke.ContourArea(contour);
                        CvInvoke.PutText(_resultImage, $"Area: {area:F2}", new Point(boundingRect.X, boundingRect.Y - 10), FontFace.HersheySimplex, 0.5, new MCvScalar(0, 255, 0), 1);
                        double perimeter = CvInvoke.ArcLength(contour, true);
                        CvInvoke.PutText(_resultImage, $"Perimeter: {perimeter:F2}", new Point(boundingRect.X, boundingRect.Y + boundingRect.Height + 20), FontFace.HersheySimplex, 0.5, new MCvScalar(0, 255, 0), 1);
                    }
                }
                pictureBox1.Image = _resultImage;
            }
        }

        // 图像框的MouseMove事件处理器,用于显示鼠标位置上的轮廓尺寸信息
        private void PictureBox1_MouseMove(object sender, MouseEventArgs e)
        {
            if (_resultImage != null && _contours != null)
            {
                var point = new Point(e.X, e.Y);
                var pixel = _resultImage[point.Y, point.X];
                if (pixel.B > 0 || pixel.G > 0 || pixel.R > 0)
                {
                    foreach (VectorOf<Point> contour in _contours)
                    {
                        Rectangle boundingRect = CvInvoke.BoundingRectangle(contour);
                        if (boundingRect.Contains(point))
                        {
                            statusLabel.Text = $"X: {e.X}, Y: {e.Y}, Width: {boundingRect.Width}, Height: {boundingRect.Height}, Area: {CvInvoke.ContourArea(contour):F2}";
                            break;
                        }
                    }
                }
                else
                {
                    statusLabel.Text = "";
                }
            }
        }
    }
}

---------------------------这是Form1.designer.cs

namespace ImageMeasurementApp
{
    partial class Form1
    {
        private System.ComponentModel.IContainer components = null;

        /// <summary>
        /// 清理所有正在使用的资源。
        /// </summary>
        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                // 释放组件容器中托管的所有资源
                components.Dispose();
            }
            base.Dispose(disposing);
        }

        #region Windows 窗体设计器生成的代码

        /// <summary>
        /// 设计器支持所需的方法 - 不要修改
        /// 使用代码编辑器修改此方法的内容。
        /// </summary>
        private void InitializeComponent()
        {
            this.components = new System.ComponentModel.Container();
            this.pictureBox1 = new Emgu.CV.UI.ImageBox(); // 图像显示控件
            this.loadImageButton = new System.Windows.Forms.Button(); // 加载图像按钮
            this.thresholdImageButton = new System.Windows.Forms.Button(); // 二值化处理按钮
            this.detectContoursButton = new System.Windows.Forms.Button(); // 检测轮廓按钮
            this.statusLabel = new System.Windows.Forms.Label(); // 状态标签,显示尺寸信息
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).BeginInit();
            this.SuspendLayout();
            // 
            // pictureBox1
            // 
            this.pictureBox1.Location = new System.Drawing.Point(12, 12); // 设置图像显示控件的位置
            this.pictureBox1.Name = "pictureBox1"; // 控件名称
            this.pictureBox1.Size = new System.Drawing.Size(600, 400); // 设置控件的大小
            this.pictureBox1.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom; // 图像缩放模式
            this.pictureBox1.TabIndex = 0; // 控件的索引号
            this.pictureBox1.TabStop = false; // 是否允许键盘焦点
            // 
            // loadImageButton
            // 
            this.loadImageButton.Location = new System.Drawing.Point(618, 12); // 设置按钮的位置
            this.loadImageButton.Name = "loadImageButton"; // 按钮名称
            this.loadImageButton.Size = new System.Drawing.Size(150, 23); // 设置按钮的大小
            this.loadImageButton.TabIndex = 1; // 按钮的索引号
            this.loadImageButton.Text = "Load Image"; // 按钮文本
            this.loadImageButton.UseVisualStyleBackColor = true; // 是否使用默认样式
            this.loadImageButton.Click += new System.EventHandler(this.LoadImageButton_Click); // 点击事件处理器
            // 
            // thresholdImageButton
            // 
            this.thresholdImageButton.Location = new System.Drawing.Point(618, 41); // 设置按钮的位置
            this.thresholdImageButton.Name = "thresholdImageButton"; // 按钮名称
            this.thresholdImageButton.Size = new System.Drawing.Size(150, 23); // 设置按钮的大小
            this.thresholdImageButton.TabIndex = 2; // 按钮的索引号
            this.thresholdImageButton.Text = "Threshold Image"; // 按钮文本
            this.thresholdImageButton.UseVisualStyleBackColor = true; // 是否使用默认样式
            this.thresholdImageButton.Click += new System.EventHandler(this.ThresholdImageButton_Click); // 点击事件处理器
            // 
            // detectContoursButton
            // 
            this.detectContoursButton.Location = new System.Drawing.Point(618, 70); // 设置按钮的位置
            this.detectContoursButton.Name = "detectContoursButton"; // 按钮名称
            this.detectContoursButton.Size = new System.Drawing.Size(150, 23); // 设置按钮的大小
            this.detectContoursButton.TabIndex = 3; // 按钮的索引号
            this.detectContoursButton.Text = "Detect Contours"; // 按钮文本
            this.detectContoursButton.UseVisualStyleBackColor = true; // 是否使用默认样式
            this.detectContoursButton.Click += new System.EventHandler(this.DetectContoursButton_Click); // 点击事件处理器
            // 
            // statusLabel
            // 
            this.statusLabel.AutoSize = true; // 标签自动调整大小
            this.statusLabel.Location = new System.Drawing.Point(618, 104); // 设置标签的位置
            this.statusLabel.Name = "statusLabel"; // 标签名称
            this.statusLabel.Size = new System.Drawing.Size(35, 13); // 设置标签的大小
            this.statusLabel.TabIndex = 4; // 标签的索引号
            this.statusLabel.Text = "label1"; // 初始标签文本
            // 
            // Form1
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); // 设置字体大小比例
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; // 字体缩放模式
            this.ClientSize = new System.Drawing.Size(800, 450); // 设置窗体的大小
            this.Controls.Add(this.statusLabel); // 添加控件到窗体
            this.Controls.Add(this.detectContoursButton);
            this.Controls.Add(this.thresholdImageButton);
            this.Controls.Add(this.loadImageButton);
            this.Controls.Add(this.pictureBox1);
            this.Name = "Form1"; // 窗体名称
            this.Text = "Image Measurement App"; // 窗体标题
            ((System.ComponentModel.ISupportInitialize)(this.pictureBox1)).EndInit(); // 初始化图像显示控件
            this.ResumeLayout(false); // 重新布局控件
            this.PerformLayout(); // 更新控件的布局和外观
        }

        #endregion

        private Emgu.CV.UI.ImageBox pictureBox1; // 图像显示控件实例
        private System.Windows.Forms.Button loadImageButton; // 加载图像按钮实例
        private System.Windows.Forms.Button thresholdImageButton; // 二值化处理按钮实例
        private System.Windows.Forms.Button detectContoursButton; // 检测轮廓按钮实例
        private System.Windows.Forms.Label statusLabel; // 状态标签实例
    }
}

------------------------------------------------这是错误页面:

img

  • 写回答

33条回答 默认 最新

  • IT技术分享社区 数据库领域优质创作者 2024-07-18 11:37
    关注

    可以远程处理一下

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(32条)

报告相同问题?

问题事件

  • 系统已结题 7月31日
  • 已采纳回答 7月23日
  • 创建了问题 7月18日

悬赏问题

  • ¥15 onlyoffice编辑完后立即下载,下载的不是最新编辑的文档
  • ¥15 求caverdock使用教程
  • ¥15 Coze智能助手搭建过程中的问题请教
  • ¥15 12864只亮屏 不显示汉字
  • ¥20 三极管1000倍放大电路
  • ¥15 vscode报错如何解决
  • ¥15 前端vue CryptoJS Aes CBC加密后端java解密
  • ¥15 python随机森林对两个excel表格读取,shap报错
  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。