0
我試圖計算出一維數組的值,這裏是我的代碼:平均值
所以,當我點擊「檢測」,它應該通過我的形象開始閾值,從我開始= 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); data = new byte [stride * bitmap.PixelHeight]; bitmap.CopyPixels(data,stride,0); – Paparazzi
在x的內部循環中重複創建x_array和y_array也沒有意義。 – Clemens