c# - 命名参数规范必须在指定所有固定参数之后出现

标签 c# opencv emgucv

我正在使用 C# 进行图像处理,并且遇到两个主要错误:

  1. 错误:命名参数规范必须在指定所有固定参数之后出现
  2. 错误:System.Drawing.Size' 是一种“类型”,但像“变量”一样使用

这是我的代码:

using System;

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Emgu.CV;
using Emgu.CV.Structure;
using Emgu.Util;
using Emgu.CV.CvEnum;
using Emgu.CV.GPU;
using Emgu.CV.UI;


namespace SNAKE_C_Sharp
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void imageBox1_Click(object sender, EventArgs e)
        {

         }

        private void Form1_Load(object sender, EventArgs e)
        {

       }

        private void button1_Click(object sender, EventArgs e)
        {
           using (OpenFileDialog dialog = new OpenFileDialog())
        {
                dialog.Filter =  "(*.*)|*.*";
                if (dialog.ShowDialog() == DialogResult.OK)
                {
                   pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
                   Image image = Image.FromFile(dialog.FileName);

                    pictureBox1.Image = image;

               }
           }

       }

       private void button2_Click(object sender, EventArgs e)
       {
           this.Close();

        }
       struct parameter
       {
           public double alpha { get; set; }
           public double beta { get; set; }
           public double gamma { get; set; }
       };
       unsafe private void button3_Click(object sender, EventArgs e)
       {
        {

                int length = 1000;
                MCvPoint2D64f* contour;

                MCvPoint2D64f center = new MCvPoint2D64f();
                var snake_param = new List<parameter>();
                snake_param.Add(new parameter { alpha = 0.1, beta = 0.1, gamma = 0.1,          });
                //Image src_img = pictureBox1.Image;
                IntPtr dst_img = new IntPtr();
                //IntPtr src_img = Emgu.CV.CvInvoke.cvLoadImage("pictureBox1.Image",     Emgu.CV.CvEnum.LOAD_IMAGE_TYPE.CV_LOAD_IMAGE_COLOR);
                Bitmap bitmapp = new Bitmap("pictureBox1.Image");

                Image<Bgr, byte> image = new Image<Bgr, byte>(bitmapp);




                center.x = image.Width;
                center.y = image.Height;




                int i;
                for (i = 0; i < length; i++)
                {
                    contour[i].x = (int)(center.x * Math.Cos(2 * Math.PI * i / length) + center.x);
                    contour[i].y = (int)(center.y * Math.Sin(2 * Math.PI * i / length) + center.y);
            }




               for (i = 0; i < length - 1; i++)
                {
                CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED,0);
            }


                CvInvoke.cvLine(dst_img, contour[length - 1], contour[0], new   MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);




                IntPtr src_img = image.Ptr;

                CvInvoke.cvSnakeImage(src_img, contour, length, snake_param[1].alpha,   snake_param[2].beta, snake_param[3].gamma, 1.0f, contour[i], System.Drawing.Size(15, 15),   new MCvTermCriteria(1, 0.0), true);

                CvInvoke.cvCvtColor(src_img, dst_img, COLOR_CONVERSION.GRAY2RGB);


                for (i = 0; i < length - 1; i++)
                {
                    CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);
                }
                CvInvoke.cvLine(dst_img, contour[length - 1], contour[0], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED, 0);
                pictureBox2.SizeMode = PictureBoxSizeMode.StretchImage;

                Bitmap bitmappbb = new Bitmap("dst_img");
                Image<Bgr, byte> imagee = new Image<Bgr, byte>(bitmapp);
                pictureBox2.Image = bitmappbb;
           }

        }

         private void imageBox1_Click_1(object sender, EventArgs e)
        {

        }

         private void panAndZoomPictureBox1_Click(object sender, EventArgs e)
        {

        }

        private void imageBox1_Click_2(object sender, EventArgs e)
        {

        }


    }
}    

如何调整以上错误?

最佳答案

这是导致错误 1 ​​的问题之一

CvInvoke.cvLine(dst_img, contour[i], contour[i + 1], new MCvScalar(255, 0, 0), 2, lineType: LINE_TYPE.EIGHT_CONNECTED,0);

我会让它更具可读性......

CvInvoke.cvLine(
    dst_img, 
    contour[i], 
    contour[i + 1], 
    new MCvScalar(255, 0, 0), 
    2, 
    lineType: LINE_TYPE.EIGHT_CONNECTED,
    0
);

看到倒数第二行正在使用命名参数 ( lineType: ),但后面跟着一个非命名参数?编译器如何知道你的意思?

第二个错误如@LajosArpad所述,您需要添加new在您使用System.Drawing.Size(..)之前.

关于c# - 命名参数规范必须在指定所有固定参数之后出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21226518/

相关文章:

c# - Server.TransferRequest() 和 http 状态码

c# - RegisterForEventValidation .net 3.5 gridview 行,如何?

c# - 'Newtonsoft.Json.Linq.JArray' 不包含的定义

opencv - OpenCV STIP(时空兴趣点)

C# - 超出范围时对象是否立即销毁?

c++ - 在 C++ 中对两个用户定义的对象进行类型转换——可能吗?

android - 适用于openCV应用程序的基于Android Windows的模拟器?

c# - 在 C# 中使用 Emgu.CV 的 System.TypeInitializationException

c# - "No suitable directory found to load unmanaged modules"在 EMGU 中是什么意思?

opencv - EmguCV 3.1 Capture.QueryFrame间歇性返回错误