Как я могу конвертировать необработанное изображение в RGB в Android с помощью OpenCV? - PullRequest
0 голосов
/ 28 сентября 2018

Мне нужно немного обработать каждый необработанный кадр и отобразить его в окне предварительного просмотра.Вот код, который я использую (в Kotlin):

fun Image.toLinearRgb(): Mat {
    val bayer16Bit = Mat(height, width, CvType.CV_16UC1, planes[0].buffer)
    val bayer8Bit = Mat().apply {
        bayer16Bit.convertTo(this, CvType.CV_8UC1, 0.0625)
    }
    val rgb8Bit = Mat().apply {
        Imgproc.cvtColor(bayer8Bit, this, Imgproc.COLOR_BayerGR2RGB)
    }
    bayer16Bit.release()
    bayer8Bit.release()
    return rgb8Bit
}

В итоге я получил странный кадр RGB с большим количеством зеленых пикселей.

Согласно документам,Необработанное изображение (через ImageFormat.RAW_SENSOR) представляет собой 16-битный одноканальный байеровый канал.Я, вероятно, что-то упускаю, потому что просто выделение байтового буфера в мате CV_16UC1 и преобразование его в RGB не работаетКроме того, кажется, что результирующий кадр слишком темный даже для линейного цветового пространства.Буду признателен за любую помощь!

1 Ответ

0 голосов
/ 28 сентября 2018

Существуют разные макеты Байера, и, не зная компоновки камеры, я думаю, вы ошиблись.Opencv ссылается на них первыми двумя цветами в верхнем левом углу: cv::COLOR_Bayer BG 2BGR

В opencv они поддерживаются с помощью различных флагов:

cv::COLOR_BayerRG2BGR
cv::COLOR_BayerGR2BGR
cv::COLOR_BayerGB2RGB

... и т. Д.Полный список можно найти здесь: https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html

Вы можете попытаться изучить схему Байера на вашей платформе или просто поэкспериментировать, пока она не заработает.Удачи!

...