在Android camera的预览回调中通过OpenCV保存图片为什么是灰色的呢

有没有大佬对opencv熟悉呀,小弟有个问题请教一下:
在camera的onpreviewframe回调中想通过opencv报错图片,按照以下代码,为什么保存的图片是灰色的呢?

Mat mat = new Mat(previewSize.height , previewSize.width, CvType.CV_8UC1);//初始化一个矩阵,没数据

mat.put(0, 0, data);//从(0,0)开始放数据,直到data放完或者矩阵被填满(若是多通道,则把当前位置的通道全部填满,才继续下一个位置,data长度必须整除通道数).

Mat bgr_i420 = new Mat(previewSize.height*3/2 , previewSize.width, CvType.CV_8UC3);

Imgproc.cvtColor(mat, bgr_i420, Imgproc.COLOR_YUV2RGBA_NV21);//转换颜色空间

File file = new File(getExternalCacheDir(), System.currentTimeMillis() + type + "mat.jpg");

 Imgcodecs.imwrite(file.getAbsolutePath(), mat);