【问题标题】:How can I convert a raw image to RGB in Android using OpenCV?如何使用 OpenCV 在 Android 中将原始图像转换为 RGB?
【发布时间】:2019-03-04 15:45:34
【问题描述】:

我需要对每个原始帧进行一些处理并将其显示在预览中。这是我正在使用的代码(在 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 位、单通道、bayered 的。我可能遗漏了一些东西,因为仅在 CV_16UC1 垫子中分配字节缓冲区并将其转换为 RGB 不起作用。此外,即使对于线性色彩空间,生成的帧似乎也太暗了。如有任何帮助,我将不胜感激!

【问题讨论】:

    标签: android image-processing kotlin opencv3.0 opencv4android


    【解决方案1】:

    有不同的拜耳图案布局,如果不知道相机的布局,我猜你弄错了。 Opencv 通过左上角的前 2 个颜色来引用它们:cv::COLOR_BayerBG2BGR

    在 opencv 中,这些是通过使用不同的标志来支持的:

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

    ...等等。完整列表可以在这里找到:https://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html

    您可以尝试研究您平台的拜耳布局,也可以只是试验直到它起作用。祝你好运!

    【讨论】:

    • 相机的拜耳模式是GRGB。所以,问题不在于转换。
    • 啊,开枪。抱歉没那么简单
    猜你喜欢
    • 2022-10-02
    • 2019-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-02
    • 2021-02-03
    • 1970-01-01
    相关资源
    最近更新 更多