EmguCV — создание образа из неуправляемых данных

Я использую EmguCV, и у меня есть матрица оттенков серого байтового типа с размером 640x480, и каждый элемент матрицы равен либо 255, либо 0. Теперь мне нужно сделать из этого изображение. Лучший конструктор, который я нашел, выглядел так:

Image<Gray,byte>(int width, int height, int stride, IntPtr scan0)

Я получил первый, второй и четвертый параметры из матрицы и отправил 640 для шага. Но это дает мне

Access violation exception: Attempted to read or write protected memory. This is often an indication that other memory is corrupt.

Я буду признателен за любую помощь.


person Auxiliary    schedule 09.05.2011    source источник


Ответы (1)


Скорее всего, вы передали что-то неправильное в качестве указателя. Неправильный шаг может привести к искажению содержимого изображения. 640 будет правильным значением в вашем случае (просто снова используйте ширину), поскольку шаг всегда представляет длину одной строки изображения в памяти (в вашем случае 640 байт). Я могу только догадываться, но не пытайтесь использовать указатель матрицы _ptr. Это может звучать логично, но это будет указывать на весь матричный объект, а не только на данные (вы хотите). Не проверяя прямо сейчас, я уверен, что вы можете использовать copyTo() матрицы для копирования содержимого в изображение (если этого достаточно для вашего варианта использования).

person Mario    schedule 09.05.2011
comment
Спасибо. Как вы, наверное, догадались, эта строка не является точным положением исключения. Исключение возникает в следующих строках, которые используют созданное изображение. Функция copyTo() матрицы принимает CvArray в качестве входных данных, но изображение имеет только элемент byte[]. Есть ли у вас какие-либо идеи о том, как скопировать его на изображение? - person Auxiliary; 10.05.2011
comment
Я совершенно уверен, что Image можно использовать в качестве замены CvArray (он является производным от него). Сейчас нет времени тестировать. - person Mario; 10.05.2011
comment
Вау, это сработало. Вы не представляете, как я ценю вашу помощь. - person Auxiliary; 10.05.2011