Opencv Android / iOS 颜色空间转换

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;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容