Я пытаюсь записать видео, проверяя каждый кадр предварительного просмотра камеры на растровое изображение с качеством ARGB_8888. Поскольку для этого требовалось 4 канала, я также создал IplImage с каналом 4. Теперь на выходе есть две основные проблемы:
1) Растровое изображение, созданное из IplImage, имеет оттенки серого. даже если я конвертировал его из BGR2RGBA. 2) 4-канальный IplImage дал мне растровое изображение (разделенное на 4 части) с таким же экраном.
Позвольте мне разместить мой код здесь.
@Override
public void onPreviewFrame(byte[] data, Camera camera) {
if (yuvIplimage != null && recording) {
videoTimestamp = 1000 * (System.currentTimeMillis() - startTime);
// Where imagewidth = 640 and imageheight = 480 (As per camera preview size)
// Create the yuvIplimage
IplImage yuvimage = IplImage.create(imageWidth, imageHeight * 3 / 2, IPL_DEPTH_8U, 2);
yuvimage.getByteBuffer().put(data);
IplImage rgbimage = IplImage.create(imageWidth, imageHeight, IPL_DEPTH_8U, 3);
opencv_imgproc.cvCvtColor(yuvimage, rgbimage, opencv_imgproc.CV_YUV2BGR_NV21);
Bitmap bitmap = Bitmap.createBitmap(imageWidth, imageHeight,Bitmap.Config.RGB_565);
bitmap.copyPixelsFromBuffer(rgbimage.getByteBuffer());
//Save file to SDCARD------------
File file = new File(Environment.getExternalStorageDirectory(),
"rgbbitmap.png");
FileOutputStream fOut;
try {
fOut = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();
// mybitmap.recycle();
} catch (Exception e) { // TODO
}
try {
// Get the correct time
recorder.setTimestamp(videoTimestamp);
// Record the image into FFmpegFrameRecorder
recorder.record(yuvimage);
} catch (FFmpegFrameRecorder.Exception e) {
Log.v(LOG_TAG, e.getMessage());
e.printStackTrace();
}
}
}
Кроме того, найдите приведенное ниже растровое изображение, поскольку я получаю результат с 4 частями одного и того же кадра.
Что не так с моим кодом или чего мне не хватает? Дайте мне знать ваши лучшие предложения.
Спасибо,
cvCvtColor()
также поддерживает такие конверсии, какCV_BGR2BGR565
, попробуйте их. - person Samuel Audet   schedule 21.04.2014