OpenCV cvtColor изображение усечено

Я использую cvtColor для преобразования изображения из формата YUYV в RGB24. Вывод в порядке с цветом, но половина изображения обрезана. Изображение представляет собой 640×480 YUYV буфер изображения без каких-либо заголовков. Я использую следующий код:

 FILE* fd = fopen("imgdump", "r+b");

char buffer[640*480*2]; // Each pixel takes two bytes in YUYV

if (fd != NULL)
{
fread(buffer, sizeof(char), 640*480*2, fd);
fclose(fd);
}

Mat s_sImageMat = Mat(640, 480, CV_8UC2);
Mat s_sConvertedImageMat;

cout << "before conversion\n";
s_sImageMat.data = (uchar*) buffer;
cvtColor(s_sImageMat, s_sConvertedImageMat, CV_YUV2RGB_YUYV);
cout << "after conversion\n";

FILE* fw = fopen("converted", "w+b");

if (fw != NULL)
{
fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*2, fw);
fclose(fw);
}

оригинал
переоборудованный

Исходный файл: https://drive.google.com/file/d/0B0YG1rjiNkBUQ0ZuaWN6Y1E2LUU/view?usp=sharing

Дополнительная информация: я использую opencv 3.2

0

Решение

Проблема, кажется, в следующей строке:

fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*2, fw);

Для RGB24 должно быть:

fwrite((char*)s_sConvertedImageMat.data, sizeof(char), 640*480*3, fw);

Каждый пиксель составляет 3 байта в RGB24

1

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

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

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