您错误地转换了图像。
如果您希望位图是彩色图像,则不需要cvtColor
.
inputFrame.rgba()
返回一个 RGBA Mat,这就是您需要的输入Utils.matToBitmap
(See JavaDoc http://docs.opencv.org/java/3.1.0/org/opencv/android/Utils.html#matToBitmap-org.opencv.core.Mat-android.graphics.Bitmap-boolean-).
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
add true
作为第三个参数Utils.matToBitmap
,因此 Mat 被转换为 alpha 预乘格式(参见JavaDoc http://docs.opencv.org/java/3.1.0/org/opencv/android/Utils.html#matToBitmap-org.opencv.core.Mat-android.graphics.Bitmap-boolean-).
final Bitmap bitmap =
Bitmap.createBitmap(mRGBT.cols(), mRGBT.rows(), Bitmap.Config.ARGB_8888);
Utils.matToBitmap(mRGBT, bitmap, true);