Просмотр 8-битного RAW-файла изображения в openCV

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

Так как я новичок в openCV, я хочу спросить, как просмотреть этот файл изображения RAW как изображение в оттенках серого, используя C ++?

Я знаю, как читать двоичные данные в C ++ и сохранял изображение в виде двумерного массива без знака (поскольку каждый пиксель является 8-битным).

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

Я использую приведенный ниже код, но получаю совершенно странное изображение:

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

Любая помощь будет оценена.

Спасибо,
Рохит

1

Решение

Вы должны конвертировать его в IplImage.

Если вы хотите увидеть его как чистое изображение в оттенках серого, на самом деле это довольно просто.

Пример кода, который я использую в одном приложении:

CvSize mSize;
mSize.height = 960;
mSize.width = 1280;

IplImage* image1 = cvCreateImage(mSize, 8, 1);
memcpy( image1->imageData, rawDataPointer, sizeOfImage);
cvNamedWindow( "corners1", 1 );
cvShowImage( "corners1", image1 );

В этот момент у вас есть действительный IplImage, который вы затем можете отобразить. (последние 2 строки кода отображают это)

Если изображение выложено мозаикой, вам придется конвертировать в RGB.

1

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

нотация c ++:

cv::Mat img(rows,cols,CV_8U,ptrToDat);
cv::imwhow("img",img);
cv::waitkey();

* данные должны быть сохранены по вертикали, иначе используйте:

cv::Mat img(cols,rows,CV_8U,ptrToDat);
img=img.t();
cv::imwhow("img",img);
cv::waitkey();
0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector