C# 如何访问由我创建的所有轮廓点?

C# 如何访问由我创建的所有轮廓点?,c#,image,opencv,unity3d,C#,Image,Opencv,Unity3d,我为webcamTexture创建了Mat,并在我确定的特定区域绘制轮廓。我想访问轮廓上的所有坐标。因为我不仅想改变垫子的颜色,还想添加一些颜色 我到达了轮廓上的x_min,x_max,x_min,x_max点。当我把它们放在循环中,我改变了颜色,我并没有得到一个好的结果 有没有其他方法可以使用?我创建了获取坐标函数,用于访问轮廓的所有点 ListMaxAndMins表示最大和最小点(x,y) x_min,x_max,x_min,x_max等高线点 Mat图像表示您的轮廓克隆 您可以创建克隆轮廓

我为webcamTexture创建了Mat,并在我确定的特定区域绘制轮廓。我想访问轮廓上的所有坐标。因为我不仅想改变垫子的颜色,还想添加一些颜色

我到达了轮廓上的x_min,x_max,x_min,x_max点。当我把它们放在循环中,我改变了颜色,我并没有得到一个好的结果


有没有其他方法可以使用?

我创建了获取坐标函数,用于访问轮廓的所有点

ListMaxAndMins表示最大和最小点(x,y)

x_min,x_max,x_min,x_max等高线点

Mat图像表示您的轮廓克隆

您可以创建克隆轮廓。
cloneContour=Yourexistingcontour.clone()

您可以使用以下功能访问轮廓值的所有点

    public List<Point> getCoordinates(List<int> _maxAndMins, Mat image)
    {
        int x_max = _maxAndMins[0];
        int x_min = _maxAndMins[1];
        int y_max = _maxAndMins[2];
        int y_min = _maxAndMins[3];

        List<Point> cordinates = new List<Point>();
        for (int i = x_min; i <= x_max; i++)
        {
            for (int j = y_min; j <= y_max; j++)
            {
                //Debug.Log("i:" + i + " j:" + j);
                if (image.get(j, i)[0] == 0 & image.get(j, i)[1] == 1)
                {
                    cordinates.Add(new Point(i, j));
                }
            }
        }
        return cordinates;
    }
public List<double[]> getColor(List<Point> cordinates, Mat image)
    {
        int r = 0, g = 0, b = 0, a = 0;

        List<double[]> colorlist = new List<double[]>();
        List<double[]> colorAvg = new List<double[]>();
        for (int i = 0; i < cordinates.Count; i++)
        {
            int x = (int)cordinates[i].x;
            int y = (int)cordinates[i].y;
            double[] color = image.get(x, y);

            colorlist.Add(color);
            r = (r + (int)colorlist[i][0]);
            g = (g + (int)colorlist[i][1]);
            b = (b + (int)colorlist[i][2]);
            a = (a + (int)colorlist[i][3]);              
            //Debug.Log("Color: "+ color.GetValue(0)+ "-"+ color.GetValue(1) + "-" + color.GetValue(2) + "-" + color.GetValue(3));
        }
        r = r / colorlist.Count;
        g = g / colorlist.Count;
        b = b / colorlist.Count;
        a = a / colorlist.Count;
        colorAvg.Add(new double[4] { r, g, b, a } );


        // Average R-G-B-A values

        Debug.Log("Avg R:" + colorAvg [0][0]);
        Debug.Log("Avg G:" + colorAvg [0][1]);
        Debug.Log("Avg B:" + colorAvg [0][2]);
        Debug.Log("Avg A:" + colorAvg [0][3]);

        return colorAvg ;
    }
public List getCoordinates(List\u maxAndMins,Mat image)
{
int x_max=_maxAndMins[0];
int x_min=_maxAndMins[1];
int y_max=_maxAndMins[2];
int y_min=_maxAndMins[3];
列表cordinates=新列表();

对于(int i=x_min;我想让这些点按轮廓顺序还是按inp像素内存顺序?性能相关吗?一种方法:轮廓是点列表。在点之间绘制直线。要访问线像素,可以使用cv的LineIterator函数谢谢,伙计们。我已经访问了所有像素点和(R-G-B)值​​轮廓的形状。