在我正在開發的應用程序中,我使用OpenCV4Android
使用CameraBridgeViewBase.CvCameraViewListener2
打開相機,當我觸摸屏幕時,我將該幀設置爲ImageView
中的圖像,如下面的代碼所示。 問題是設置爲imageview
的圖像始終與圖片中顯示的相機上的預覽顏色不同。我相信這個問題與我所做的轉換有關,如下代碼所述如何在保持顏色的同時將Mat對象轉換爲位圖?
我的問題是如何將Mat對象轉換爲保存相同顏色的Bitmap
?
PIC
@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。 –
正如Dan所說的顏色順序不正確,你的紅色和藍色通道的排列順序不同 – EdChum
@DanMašek你的意思是:Bitmap.createBitmap(mRGBT.cols(),mRGBT.rows(),Bitmap.Config.RGB_565 );如果這就是你的意思,那麼BGR就沒有選擇! – user2121