У меня есть приложение .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 #
;