C# Получить местоположение пикселя из изображения<,> EMGU CV 3.3

Я работал над проектом на основе EMGU, где мне нужно создать скелетное изображение с помощью алгоритма прореживания ZhangSuen, который прекрасно работает. Для дальнейшего анализа я хочу получить все пиксельные местоположения скелета и сохранить их в List<Point>

Я много исследовал проблемы производительности при использовании Bitmap.GetPixel() а также Bitmap.SetPixel() методы. Вот почему я следовал подходу использования byte[,,] массив для получения местоположения пикселей. Мой подход до сих пор выглядит так:

    public static List<Point> GetSkeletonPoints(Image<Gray, Byte> src, Byte color = 255)
    {
        var SkeletonPoints = new List<Point>();
        int rows = src.Width;
        int cols = src.Height;
        byte[,,] data = src.Data;

        for(int y = rows - 1; y >= 0; y--)
        {
            for(int x = cols - 1; x >= 0; x--)
            {
              if(data[x, y, 0] != 0)
                {
                    SkeletonPoints.Add(new Point(x, y));
                }
            }
        }
        return SkeletonPoints;
    }

Скелетные пиксели имеют значение 255, а фон черный (0). Теперь странная вещь, если я пытаюсь изменить входное изображение следующим образом:

src.Data[0,0,0] = 255;

абсолютно ничего не меняется, когда я смотрю на изображение с помощью CvInvoke.Imshow("test", src);

Запуск представленного метода приводит к тому, что точка Point не добавляется в список, что означает, что условие в операторе if никогда не выполняется. Выполнение if-оператора вроде этого if(data[x, y, 0] == 0) приводит к условию, которое всегда выполняется, и я получаю каждую точку в изображении, несмотря на то, что она на самом деле черная (0) или белая (255).

Я думал, что по ошибке использовал полностью черное изображение.. Но потом я применил CvInvoke.FindNonZero() Метод для ввода изображения и нашел 500 NonZero-пикселей, что для меня абсолютно бессмысленно.

Я уже отчаялся, может, я что-то упустил? Любая помощь или подсказка высоко ценится! (даже если это не решает мою проблему, но повышает производительность зацикливания изображений в целом)

0 ответов

Другие вопросы по тегам