[英]Calculate Color in Camera Preview
我正在一個項目中從Camera
拍攝Images
或Preview 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.