簡體   English   中英

在相機預覽中計算色彩

[英]Calculate Color in Camera Preview

我正在一個項目中從Camera拍攝ImagesPreview Images ,然后我必須計算圖像中Blue的平均數量,我已經從相機中快速拍攝了圖像( As Preview Images )。 圖像格式為NV21 (真的不是圖像格式專家,所以我不為什么他們使用它)

這就是我從Camera Preview Callback讀取圖像的方式

public void onPreviewFrame(byte[] data, Camera camera) {

        Camera.Parameters parameters = camera.getParameters();
        Size size = parameters.getPreviewSize();
        YuvImage image = new YuvImage(data, ImageFormat.NV21, size.width,
                size.height, null);
        Rect rectangle = new Rect();
        rectangle.bottom = size.height;
        rectangle.top = 0;
        rectangle.left = 0;
        rectangle.right = size.width;
        ByteArrayOutputStream out2 = new ByteArrayOutputStream();
        image.compressToJpeg(rectangle, 100, out2);

        byte[] d = out2.toByteArray();
        Bitmap bitmap = BitmapFactory.decodeByteArray(d, 0, d.length);
    }

如您所見,我現在有Bitmap ,並且我打算讀取Bitmap像素,然后Pixel by Pixel處理,從而確定圖像中的藍色,但是同事們說這種方法在某些情況下笨拙且緩慢,而且不准確 ,並且我必須從硬件本身獲取圖像中的藍色作為矩陣,並且不確定從哪里開始(順便說一下,我的同事在iOS版本上工作),我們將不勝感激。

如果您在Android上使用opencv,則可以進行一個簡單的本地調用(JNICALL),將位圖作為jbyte *傳遞給函數,然后在函數中使用Mat myuv,mbgra將其轉換為BGR; cvtColor(myuv,mbgra,CV_YUV420sp2BGR,4);

然后分割矩陣mbgra,這之后發現沒有藍色像素是對分割后的矩陣的二進制掩碼操作,因為它的本機狀態並且您不會逐像素查看每個像素,所以它可能很快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM