gpt4 book ai didi

android - 如何在保留颜色的同时将 Mat 对象转换为 Bitmap?

转载 作者:搜寻专家 更新时间:2023-11-01 08:31:45 26 4
gpt4 key购买 nike

在我正在开发的应用程序中,我使用 OpenCV4Android 打开相机使用 CameraBridgeViewBase.CvCameraViewListener2当我触摸屏幕时,我将该帧设置为 ImageView 中的图像如下代码所示。问题是图像设置为 imageview如图所示,总是与相机上的预览颜色不同。我相信这个问题与我在下面的代码中说明的转换有关

我的问题是如何将 Mat 对象转换为 Bitmap保持相同的颜色?

图片

enter image description here代码:

@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;
}

最佳答案

您正在错误地转换图像。

如果您希望位图是彩色图像,则不需要cvtColorinputFrame.rgba() 返回一个 RGBA Mat,这是 Utils.matToBitmap 所需的输入(参见 JavaDoc)。

if (touched) {
touched = false;
final Bitmap bitmap =
Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.RGB_565);
Utils.matToBitmap(mRGBT, bitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
mIV.setImageBitmap(bitmap);
}
});
}

如果您希望位图是灰度图像,请使用 Imgproc.COLOR_BGRA2GRAY:

if (touched) {
touched = false;
Imgproc.cvtColor(mRGBT, mRGBT, Imgproc.COLOR_BGRA2GRAY);
final Bitmap bitmap =
Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.RGB_565);
Utils.matToBitmap(mRGBT, bitmap);
runOnUiThread(new Runnable() {
@Override
public void run() {
mIV.setImageBitmap(bitmap);
}
});
}

如果你需要使用位图 Bitmap.Config.ARGB_8888 添加 true 作为 Utils.matToBitmap 中的第三个参数,所以 Mat转换为 alpha 预乘格式(参见 JavaDoc )。

final Bitmap bitmap =
Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRGBT, bitmap, true);

关于android - 如何在保留颜色的同时将 Mat 对象转换为 Bitmap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39957955/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com