【发布时间】:2017-02-18 20:32:58
【问题描述】:
在我正在开发的应用程序中,我使用OpenCV4Android 使用CameraBridgeViewBase.CvCameraViewListener2 打开相机,当我触摸屏幕时,我将该帧设置为ImageView 内的图像,如下面的代码所示。
问题是设置为imageview 的图像始终与相机上的预览颜色不同,如图所示。我认为这个问题与我在下面的代码中说明的转换有关
我的问题是如何将 Mat 对象转换为保持相同颜色的 Bitmap?
图片
@Override
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Log.w(TAG, "onCameraFrame");
if (mRGBT != null) {
mRGBT.release();
}
mRGBT = inputFrame.rgba().t();
Core.flip(mRGBT, mRGBT, 1);
Imgproc.resize(mRGBT, mRGBT, inputFrame.rgba().size());
if (touched) {
touched = false;
Imgproc.cvtColor(mRGBT, mRGBT, CvType.CV_8U);
final Bitmap bitmap = Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.RGB_565);
Utils.matToBitmap(mRGBT, bitmap);
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
mIV.setImageBitmap(bitmap);
}
});
}
return mRGBT;
}
【问题讨论】:
-
OpenCV 适用于 BGR 图像。您将帧转换为 RGB。
-
正如丹所说的颜色顺序不正确,您的红色和蓝色通道的顺序不同
-
@DanMašek 你的意思是这一行:Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.RGB_565);..如果这就是你的意思,那就有BGR 没有选择!!
标签: android opencv bitmap android-bitmap opencv3.1