Попытка получить капли с помощью Emgu на Raspberry Pi - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть приложение .NetCore. Я использую Emgu CV Framework для обработки изображений. Я нацеливаюсь на Rapsberry Pi, используя Raspbian OS. Я снимаю изображения с камеры. Я сравниваю предыдущие и текущие изображения. Разрабатывая разницу. Применяя порог. Преобразование слишком GrayScale, а затем в двустороннее изображение. Emgu не поддерживается в .NetCore. Так что пытаюсь заставить это работать самостоятельно. Я сделал некоторые функции Emgu, которые работают на рабочем столе Windows, на Raspain ARM.

Я пытаюсь получить капли из двоичного изображения.

использование метода Detect приведет к ошибке сегментации. Поэтому пытаюсь работать с ConnectedComponents.

У меня есть это:

Mat AbsDiffThresholded = new Mat(288, 360,  DepthType.Cv8U, 1);

public static byte GetByteConnectedComponentsFrom2DArray( int minBlobSize)
{
    VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
    double area;
    int n;
    CvInvoke.FindContours(AbsDiffThresholded, contours, null, RetrType.External, ChainApproxMethod.ChainApproxSimple);

    n = contours.Size;

    for (var i = 0; i < n; i++)
    {
        if (CvInvoke.ContourArea(contours[i]) >= minBlobSize)
        {
            return 1;
        }
    }
    return 0;
}

Что дает мне области белых пикселей.

Но я сделал, чтобы узнать плотность белых пикселей в области.

Если я попытаюсь использовать

var M = CvInvoke.Moments(c);
 int cx = (int)(M.M10 / M.M00);
 int cy = (int)(M.M01 / M.M00)

произойдет ошибка в строке Cv.Invoke с ошибкой сегментации.

Я думаю, что в сочетании с координатами x, y я могу установить ROI, а оттуда - плотность белого пикселя.

я могу заставить все работать легко на рабочем столе, но, как я уже сказал, я использую Raspian ARM Processor с использованием .NetCore c #

;

...