Android RGB в YCbCr Преобразование и вывод в imageView - PullRequest
0 голосов
/ 02 ноября 2018

Я делаю обработку изображения, которая требует преобразования растрового изображения RGB в цветовое пространство YCbCr. Я получил значение RGB для каждого пикселя и применил к нему матрицу преобразования.

public void convertRGB (View v) {
    if (imageLoaded) {
        int width = inputBM.getWidth();
        int height = inputBM.getHeight();

        int pixel;
        int alpha, red, green, blue;
        int Y,Cb,Cr;

        outputBM = Bitmap.createBitmap(width, height, inputBM.getConfig());

        for (int x = 0; x < width; x++) {
            for (int y = 0; y < height; y++) {
                pixel = inputBM.getPixel(x, y);
                alpha = Color.alpha(pixel);
                red = Color.red(pixel);
                green = Color.green(pixel);
                blue = Color.blue(pixel);

                Y  =  (int) (0.299     *  red + 0.587  * green + 0.114 * blue);
                Cb =  (int) (128-0.169 *   red-0.331   * green + 0.500 * blue);
                Cr =  (int) (128+0.500 *   red - 0.419 * green - 0.081 * blue);

                int p = (Y << 24) | (Cb << 16) | (Cr<<8);

                outputBM.setPixel(x,y,p);

            }
        }
        comImgView.setImageBitmap(outputBM);
    }
}

Проблема в том, что у него выходной цвет отличается от исходного. Я пытался использовать BufferedImage, но он не работает в Android

Оригинал:

Original

После преобразования:

After Convert

Могу ли я узнать, как правильно обрабатывать изображение YCbCr в Android Java.

1 Ответ

0 голосов
/ 02 ноября 2018

Попробуйте установить, используя код ниже

ByteArrayOutputStream out = new ByteArrayOutputStream();
YuvImage yuvImage = new YuvImage(your_yuv_data, ImageFormat.NV21, width, height, null);
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 50, out);
byte[] imageBytes = out.toByteArray();
Bitmap image = BitmapFactory.decodeByteArray(imageBytes, 0, imageBytes.length);
iv.setImageBitmap(image);

Проверьте документацию для подробного описания YuvImage Класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...