美文网首页
Opencv Android / iOS 颜色空间转换

Opencv Android / iOS 颜色空间转换

作者: 三越 | 来源:发表于2020-07-11 18:12 被阅读0次

Android Bitmap 与 iOS UIImage 各自转换成 CV::Mat 后会有颜色空间(color space)不一样的问题。Android -> RGBA, iOS -> BGRA,为了方便处理,将双端 Mat 转换成同一颜色空间处理。

cv::Mat space_app2bgr(const cv::Mat &appMat) {
    CV_Assert(appMat.type() == CV_8UC1 || appMat.type() == CV_8UC3 || appMat.type() == CV_8UC4);
    cv::Mat bgrMat;
    if (appMat.type() == CV_8UC4) {
#if defined(__ANDROID__)
        cv::cvtColor(appMat, bgrMat, cv::COLOR_RGBA2BGR);
#else
        cv::cvtColor(appMat, bgrMat, cv::COLOR_BGRA2BGR);
#endif
    }
#if defined(__ANDROID__)
    else if (appMat.type() == CV_8UC3) {
        cv::cvtColor(appMat, bgrMat, cv::COLOR_RGB2BGR);
    }
#endif
    else {
        bgrMat = appMat.clone();
    }
    
    return bgrMat;
}

cv::Mat space_bgr2app(const cv::Mat &bgrMat, int type) {
    CV_Assert(type == CV_8UC1 || type == CV_8UC3 || type == CV_8UC4);
    cv::Mat appMat;
    if (type == CV_8UC4) {
#if defined(__ANDROID__)
        cv::cvtColor(bgrMat, appMat, cv::COLOR_BGR2RGBA);
#else
        cv::cvtColor(bgrMat, appMat, cv::COLOR_BGR2BGRA);
#endif
    }
#if defined(__ANDROID__)
    else if (type == CV_8UC3) {
        cv::cvtColor(bgrMat, appMat, cv::COLOR_BGR2RGB);
    }
#endif
    else {
        appMat = bgrMat.clone();
    }
    
    return appMat;
}

相关文章

网友评论

      本文标题:Opencv Android / iOS 颜色空间转换

      本文链接:https://www.haomeiwen.com/subject/fxbicktx.html