我遇到了使用Android OpenCV二進制文件裁剪圖像的問題。使用openCV裁剪圖像使用Android二進制文件的矩陣
這是我在做什麼,試圖裁剪圖像的左上象限:
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);
這兩個來源不可比,因爲您不使用第一個數據。無論如何,你的位圖和數據的類型應該匹配。 – rics 2012-02-27 21:22:29
對不起,我添加了缺件 – scoleman2272 2012-02-27 21:35:40
我已提高您的問題,因爲在修改代碼後找不到工作解決方案。 – rics 2012-03-02 22:27:20