我遇到了使用Android OpenCV二进制文件裁剪图像的问题。
我正在尝试裁剪图像的左上象限:
Initialization {
mYuv = new Mat(mFrameSize.height + mFrameSize.height / 2, mFrameSize.width, CvType.CV_8UC1);
mGraySubmat = mYuv.submat(0, mFrameSize.height, 0, mFrameSize.width);
}
processFrame(byte[] data) {
mYuv.put(0, 0, data);
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2BGR, 4);
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.ARGB_8888);
Rect roi = new Rect(0,0,mFrameSize.width/2,mFrameSize.height/2);
Mat faceMat = new Mat(mRgba,roi);
Utils.matToBitmap(faceMat.clone(), bmp);
}
我得到的是一张乱码图像。我已经看到其他帖子说要做我正在做的事情,但它不起作用。实际上图像看起来就像它那样,但也有阴影图像不成比例。
我可以手动执行此操作并使用文件 - 请参阅下文。我做错了吗?
processFrame(byte[] data) {
for (int i = 0; i < frameSize; i++) {
int y = (0xff & ((int) data[i]));
rgba[i] = 0xff000000 + (y << 16) + (y << 8) + y;
}
// Example of cropping the upper left corder
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.RGB_565);
bmp.setPixels(rgba, 0/* offset */, mFrameSize.width /* stride */, 0, 0, mFrameSize.width/2, mFrameSize.height/2);
答案 0 :(得分:0)
我猜你是从this example开始的。在此原始来源中,您可以看到没有Imgproc.COLOR_GRAY2BGR
转化。如果你想要一个彩色图像,那么你需要使用选择二:
Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4);
并且您不需要mGraySubmat。
如果您需要灰度图像,那么第一选择更好:
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);
后一种选择会截断default preview format YCbCr_420_SP (NV21)
格式化图像的色度分量。