Android Bitmap 與 iOS UIImage 各自轉(zhuǎn)換成 CV::Mat 后會有顏色空間(color space)不一樣的問題。Android -> RGBA, iOS -> BGRA,為了方便處理蚁滋,將雙端 Mat 轉(zhuǎn)換成同一顏色空間處理徽诲。
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;
}