Я давно не разрабатывал для Tango, но недавно я обновился до последней версии Tango Java API и заметил, что TangoImageBuffer
объекты теперь имеют format == 17
, который:
public static final int YCRCB_420_SP = 17;
Насколько я помню, в предыдущих версиях раньше было YV12
скорее, чем YCRCB_420_SP
,
public static final int YV12 = 842094169;
Я использовал, чтобы применить OpenCV cvtColor
Функция для преобразования его в BGR:
cv::Mat imageBgr(720, 1080, CV_8UC3);
cv::Mat image(3 * 720 / 2, 1280, CV_8UC1);
cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV12);
Есть ли способ прочитать YCRCB_420_SP
используя OpenCV? Я старался COLOR_YCrCb2BGR
и подобные режимы, но они не работают.
По-видимому, COLOR_YUV2RGB_NV12
все еще работает и дает несколько разумный результат:
Но кажется, что цвета выключены, и все выглядит очень желтовато. Или я параноик?
У меня вопрос, как правильно читать YCRCB_420_SP
изображений? Правильно ли применять OpenCV cv::COLOR_YUV2RGB_NV12
?
РЕДАКТИРОВАТЬ:
Я попытался использовать NV21, как подсказал @fireant, но этот явно не работает:
NV12 была намного ближе к оригинальным цветам. Код является:
cv::cvtColor(image, imageBgr, cv::COLOR_YUV2RGB_NV21);
Формат изображения должен быть YUV NV21 не NV12. OpenCV может конвертировать изображение из этот формат в BGR или RGB.
Похоже, вы используете RGB вместо BGR, изображение после NV21 с BGR выглядит так:
Других решений пока нет …