Просмотр файла изображения RAW в оттенках серого в C ++ с помощью openCV

У меня есть сырой файл изображения, который содержит данные изображения с 5-го байта и далее.
Каждый байт в файле представляет 8-битную интенсивность пикселей в градациях серого.
Мне удалось сохранить двоичные данные изображения в двумерном массиве без знака.

Может кто-нибудь сказать мне, как использовать массив или файл для отображения изображения в openCV?

Прямо сейчас я использую этот код:

void openRaw() {
cv::Mat img(numRows,numCols,CV_8U,&(image[0][0]);
//img.t();
cv::imshow("img",img);
cv::waitKey();
}

Но его отображение неправильное изображение.

Я также пытался использовать метод IplImage, но я не уверен, как передать указатель на исходное изображение там.

Может ли кто-нибудь предоставить мне код для этого?

Спасибо,
Удай

0

Решение

«Мне удалось сохранить двоичные данные изображения в двумерном массиве без знака».

это твоя проблема здесь.

opencv хранит данные пикселей в последовательном uchar *, так что он ожидает от вас того же.

Ваш 2d массив, скорее всего, массив указателей, это не то же самое.

итак: вместо 2d массива сделайте 1d:

uchar *data = new uchar[rows * cols];

Вы можете получить доступ к отдельным пикселям там, как:

uchar pixel = data[y*cols+x];

и затем передайте указатель данных в ваш cv :: Mat:

cv::Mat img( rows, cols, CV_8U, data );

о, и, пожалуйста, больше не используйте IplImages (он же 1.0 api), избегайте любой ценой!

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]