У меня есть сырой файл изображения, который содержит данные изображения с 5-го байта и далее.
Каждый байт в файле представляет 8-битную интенсивность пикселей в градациях серого.
Мне удалось сохранить двоичные данные изображения в двумерном массиве без знака.
Может кто-нибудь сказать мне, как использовать массив или файл для отображения изображения в openCV?
Прямо сейчас я использую этот код:
void openRaw() {
cv::Mat img(numRows,numCols,CV_8U,&(image[0][0]);
//img.t();
cv::imshow("img",img);
cv::waitKey();
}
Но его отображение неправильное изображение.
Я также пытался использовать метод IplImage, но я не уверен, как передать указатель на исходное изображение там.
Может ли кто-нибудь предоставить мне код для этого?
Спасибо,
Удай
«Мне удалось сохранить двоичные данные изображения в двумерном массиве без знака».
это твоя проблема здесь.
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), избегайте любой ценой!
Других решений пока нет …