Я использую оболочку EmguCV 3.0.0 для библиотеки OpenCV 3.0. Я использую класс Mat
в нескольких местах. Вот пример одноканального изображения 8x8, состоящего из double
значений:
Mat image = new Mat(8, 8, DepthType.Cv64F, 1);
Класс Image<>
предоставляет разумные средства для получения и установки значений пикселей, и этот метод идентичен для _ 5_, но это не кажется таким очевидным для _ 6_ класс. Единственный способ, которым я понял, как установить отдельный пиксель, - это использовать маску:
// set two pixel values, (0,0) to 9.0, (2, 3) to 42.0
Matrix<byte> mask = new Matrix<byte>(8,8);
mask.Data[0, 0] = 1;
image.SetTo(new MCvScalar(9.0), mask);
mask = new Matrix<byte>(8,8);
mask.Data[2, 3] = 1;
image.SetTo(new MCvScalar(42.0), mask);
Это кажется, как будто это должно быть две строки, а не шесть, поэтому я чувствую, что что-то упускаю. Все становится еще сложнее, когда Mat
- это более одного канала, потому что Matrix<>
только 2D, поэтому маска должна использоваться для установки пикселя на каждом канале.
Я не могу позволить себе время или память, чтобы установить пиксели таким образом. Как установить пиксели с помощью одного вызова метода?