Как сбросить MatrixBox в EmguCv, используя winforms - PullRequest
0 голосов
/ 07 июня 2018

Мне не удалось найти много документации для правильного использования MatrixBox от Emgu.CV.UI.

Я использую EmguCV версии 3.4.1, и я хотел бы использовать MatrixBox, чтобы показать в реальном времени обновление значений пикселей из видео, которое я транслирую.

Winforms Matrixbox Control

    private void BufferReceiver_ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
        Matrix<UInt16> matrix = new Matrix<UInt16>(mat.Rows, mat.Cols, mat.NumberOfChannels);
        Matrix<UInt16> subMatrix = matrix.GetSubRect(new Rectangle(0, 0, 10, 10));

        matrixBox1.Matrix = subMatrix;
        matrixBox1.Refresh();
    }

Я могу отобразить матрицу 10x10 значений пикселей, но когда вышеуказанный метод выполняется снова, матрица увеличивается до20x20, но заменяет матрицу 10x10 обновленными значениями.

Первый запуск

Второй запуск

Я вижу изисходный код OpenCv, в котором MatrixBox просто обновляет DataGridView, но я не могу найти способ очистить MatrixBox перед обновлением значений.

1 Ответ

0 голосов
/ 13 июля 2018

Вы можете попробовать

    Size sz = matrixBox1.Size;
    Point lc = matrixBox1.Location;
    int ti = matrixBox1.TabIndex;
    matrixBox1.Dispose();
    matrixBox1 = New Emgu.CV.UI.MatrixBox;
    matrixBox1.Parent = this;
    matrixBox1.Location = lc;
    matrixBox1.Matrix = Nothing;
    matrixBox1.Name = "MatrixBox1";
    matrixBox1.Size = sz;
    matrixBox1.TabIndex = ti;

    matrixBox1.Matrix = subMatrix;
...