Я пытаюсь вычислить значение одномерного массива, вот мой код:Среднего значения элементов массива
Так что, когда я нажимаю «Detect», он должен начать порог через мое изображение, начиная с I = 0 до высоты изображения и от J = 0 ширина изображения:
public void detektieren_Click(object sender, RoutedEventArgs e)
{
for (i = 0; i < bitmap.Height; i++)
{
for (j = 0; j < bitmap.Width; j++)
{
stride = bitmap.PixelWidth * (bitmap.Format.BitsPerPixel/8);
data = new byte[stride * bitmap.PixelHeight];
bitmap.CopyPixels(data, stride, 0);
index = i * stride + 4 * j;
в настоящее время доступа к данным ARGB:
byte A = data[index + 3];
byte R = data[index + 2];
byte G = data[index + 1];
byte B = data[index];
После того, как порог, если есть какие пиксели отвечают условию R = 0 & G = 0 & B = 255:
if (Convert.ToInt32(R) == 0 && Convert.ToInt32(G) == 0 && Convert.ToInt32(B) == 255)
{
// Create a writer and open the file:
StreamWriter Messdaten;
if (!File.Exists("C:/Users/.../Messdaten.csv"))
{
Messdaten = new StreamWriter("C:/Users/.../Messdaten.csv");
}
else
{
Messdaten = File.AppendText("C:/Users/.../Messdaten.csv");
}
// Write to the file:
Messdaten.WriteLine(j + ";" + i);
// Close the stream:
Messdaten.Close();
for (y = 0; y < bitmap.Height; y++)
{
for (x = 0; x < bitmap.Width; x++)
{
double x_mw = 0; double y_mw = 0;
int[] x_array = new int[(int)bitmap.Width];
int[] y_array = new int[(int)bitmap.Height];
x_array[x] = j;
x_mw = x_array.Average();
y_array[y] = i;
y_mw = y_array.Average();
xy_coord.Content = (int) x_mw + ";" + (int) y_mw;
}
}
}
}
}
}
Все прекрасно работает в файле CSV, я могу обнаружить пиксель (например, синий с R = 0 G = 0 B = 255). Но я также хочу скопировать данные каждого пикселя в массив. Но, по-видимому, это действительно не то, что я хочу. Он не вычисляет среднее значение суммы синих пикселей (= центроид синего пикселя), вместо этого он просто показывает x_mw = 0 и y_mw = 0. Что я сделал неправильно?
Мне нет смысла повторять выполнение этого кода в цикле. stride = bitmap.PixelWidth * (bitmap.Format.BitsPerPixel/8); данные = новый байт [шаг * bitmap.PixelHeight]; bitmap.CopyPixels (данные, шаг, 0); – Paparazzi
Также нет смысла повторять создание x_array и y_array во внутреннем цикле над x. – Clemens