Articles of yuv

使用libyuv库缩放YUV图像时出现的问题

我正在开发基于Camera API 2的相机应用程序,我发现使用libyuv有几个问题。 我想转换从ImageReader中检索到的YUV_420_888图像,但是我在可YUV_420_888处理的表面中进行缩放时遇到了一些问题。 本质上:图像以绿色调而不是具有相应的音调(我正在导出.yuv文件并使用http://rawpixels.net/检查它们)。 您可以在此处查看输入示例: 我执行缩放后得到的结果: 我认为我在步幅方面做错了,或提供了无效的YUV格式(也许我必须将图像转换为另一种格式?)。 但是,我无法弄清楚错误在哪里,因为我不知道如何将绿色与缩放算法相关联。 这是我正在使用的转换代码,您可以忽略返回NULL,因为有进一步的处理与问题无关。 #include #include #include #include #include #include #define LOG_TAG “libyuv-jni” #define unused(x) UNUSED_ ## x __attribute__((__unused__)) #define LOGD(…) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) #define LOGE(…) __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS_) struct YuvFrame { int width; int height; uint8_t *data; uint8_t *y; uint8_t *u; uint8_t *v; }; static struct YuvFrame i420_input_frame; […]

camera2 api将yuv420转换成rgb绿色

我试图从YUV_420_888转换图像到RGB,我有一些输出图像的麻烦。 在ImageReader中,我以YUV_420_888格式(使用相机2 api获取此图像预览)获取图像。 imageReader = ImageReader.newInstance(1920,1080,ImageFormat.YUV_420_888,10); 在android sdk中为YuvImage类写的,那YuvImage只用了NV21,YUY2。 因为我们可以看到N21和yuv420之间的差别不大,我尝试将数据转换为N21 YUV420: 和N21: 在onImageAvailable我分别得到每个飞机,把他们在正确的地方(如图像) ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ByteBuffer bufferY = image.getPlanes()[0].getBuffer(); byte[] data0 = new byte[bufferY.remaining()]; bufferY.get(data0); ByteBuffer bufferU = image.getPlanes()[1].getBuffer(); byte[] data1 = new byte[bufferU.remaining()]; bufferU.get(data1); ByteBuffer bufferV = image.getPlanes()[2].getBuffer(); byte[] data2 = new byte[bufferV.remaining()]; bufferV.get(data2); … outputStream.write(data0); for (int i=0;i<bufferV.remaining();i++) { outputStream.write(data1[i]); outputStream.write(data2[i]); […]

将预览帧转换为位图

我知道这个主题是在板上多次,但我无法得到它的工作无论如何…我想保存从预览到JPEG文件的视图框架。 它看起来或多或less(代码简化,没有额外的逻辑,例外等),像这样… public void onPreviewFrame(byte[] data, Camera camera) { int width = camera.getParameters().getPreviewSize().width; int height = camera.getParameters().getPreviewSize().height; final int[] rgb = decodeYUV420SP(data, width, height); Bitmap bmp = Bitmap.createBitmap(rgb, width, height,Bitmap.Config.ARGB_8888); String filename="/sdcard/file" + (index++)+ ".jpg"; FileOutputStream out; out = new FileOutputStream(filename); bmp.compress(Bitmap.CompressFormat.JPEG, 90, out); out.flush(); out.close(); out=null; } 这是我试图转换颜色的方法之一(我相信这个董事会) public int[] decodeYUV420SP( byte[] yuv420sp, int […]

将Android camera2 api YUV_420_888转换为RGB

我正在编写一个应用程序,需要摄像头的饲料,将其转换为rgb,以便做一些处理。 它在使用NV21 Yuv格式的旧相机实现方面效果很好。 我遇到的问题是新的Yuv格式,YUV_420_888。 在新的Camera2 Api中,图像不再正确转换为RGB,而是发送YUV_420_888 yuv格式而不是NV21(YUV_420_SP)格式。 有人可以告诉我如何将YUV_420_888转换为RGB? 谢谢

将NV21字节数组转换为位图可读格式

嘿,我正在创build小型相机应用程序,我已经实现了每一件事情,但我有一个问题是将NV21字节数组转换为JPEG格式 我find了很多方法,但是他们中的所有人甚至不工作或者在某些设备上工作 首先我试过这个片段,它在Xperia z2 5.2上工作,但是在Galaxy S4.4 4.4.4上 bitmap = BitmapFactory.decodeByteArray(data, 0, data.length); 也是这种方式在同一设备上工作,并在另一个失败 int pich = camera.getParameters().getPreviewSize().height; int picw = camera.getParameters().getPreviewSize().width; int[] pix = new int[picw * pich]; bitmap.getPixels(pix, 0, picw, 0, 0, picw, pich); // int R, G, B, Y; for (int y = 0; y < pich; y++) { for (int x = […]

使用新的Android camera2 api从YUV_420_888进行JPEG编码时的绿色图像

我正在尝试使用新的相机api。 突发捕捉速度太慢了,所以我在ImageReader中使用了YUV_420_888格式,稍后再做一个JPEG格式的转换,就像在下面的文章中提到的那样: Android camera2捕捉突发太慢 问题是,当我尝试使用RenderScript从YUV_420_888编码JPEG时,出现绿色图像,如下所示: RenderScript rs = RenderScript.create(mContext); ScriptIntrinsicYuvToRGB yuvToRgbIntrinsic = ScriptIntrinsicYuvToRGB.create(rs, Element.RGBA_8888(rs)); Type.Builder yuvType = new Type.Builder(rs, Element.YUV(rs)).setX(width).setY(height).setYuvFormat(ImageFormat.YUV_420_888); Allocation in = Allocation.createTyped(rs, yuvType.create(), Allocation.USAGE_SCRIPT); Type.Builder rgbaType = new Type.Builder(rs, Element.RGBA_8888(rs)).setX(width).setY(height); Allocation out = Allocation.createTyped(rs, rgbaType.create(), Allocation.USAGE_SCRIPT); in.copyFrom(data); yuvToRgbIntrinsic.setInput(in); yuvToRgbIntrinsic.forEach(out); Bitmap bmpout = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); out.copyTo(bmpout); ByteArrayOutputStream baos = new ByteArrayOutputStream(); bmpout.compress(Bitmap.CompressFormat.JPEG, 100, […]

将位图数组转换为YUV(YCbCr NV21)

如何将BitmapFactory.decodeFile()返回的位图转换为YUV格式(类似于相机的onPreviewFrame()在字节数组中返回的内容)?

在Android中显示YUV图像

在我的应用程序中,我们需要将从服务器接收的video帧显示给我们的android应用程序, 服务器正在发送每秒50帧的video数据,在WebM中编码,即使用libvpx对图像进行编码和解码, 现在从libvpx解码得到YUV数据后,我们就可以在图像布局上显示, 目前的实施是这样的, 在JNI / Native C ++代码中,我们将YUV数据转换为RGB数据在Android框架中调用 public Bitmap createImgae(byte[] bits, int width, int height, int scan) { Bitmap bitmap=null; System.out.println("video: creating bitmap"); //try{ bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(ByteBuffer.wrap(bits)); //}catch(OutOfMemoryError ex){ //} System.out.println("video: bitmap created"); return bitmap; } 要创build位图图像, 使用以下代码在imageView上显示图像, img = createImgae(imgRaw, imgInfo[0], imgInfo[1], 1); if(img!=null && !img.isRecycled()){ iv.setImageBitmap(img); //img.recycle(); img=null; […]

在Android上旋转YUV字节数组

我正在寻找旋转从预览Callblack收到的YUV帧预览,到目前为止,我已经创build了这个post,它支持一个algorithm来旋转帧预览,但混乱的预览图像相机像素旋转 另一种旋转图像的方法是从YUV图像中创build一个jpg,创build一个位图,旋转一个位图并获取位图的字节数组,但是我真的需要YUV(NV21)中的格式。 仅供参考。 我问这个的原因是因为我有一个支持旋转的相机应用程序,但是帧预览只能以横向模式返回。

在Android的onPreviewFrame期间转换YUV-> RGB(image processing) – > YUV?

我使用SurfaceView捕获图像并获取Yuv Raw预览数据public void onPreviewFrame4(byte [] data,Camera camera) 我必须在onPreviewFrame中执行一些图像预处理,所以我需要将Yuv预览数据转换为RGB数据,而不是图像预处理,然后返回Yuv数据。 我已经使用这两个函数来编码和解码Yuv数据到RGB如下: public void onPreviewFrame(byte[] data, Camera camera) { Point cameraResolution = configManager.getCameraResolution(); if (data != null) { Log.i("DEBUG", "data Not Null"); // Preprocessing Log.i("DEBUG", "Try For Image Processing"); Camera.Parameters mParameters = camera.getParameters(); Size mSize = mParameters.getPreviewSize(); int mWidth = mSize.width; int mHeight = mSize.height; int[] mIntArray = […]