2013-02-15 50 views
2

我正在實現Android的計算機視覺項目,並且我正在使用Android NDK的OpenCV。它以相機的方式從PreviewCallback的字節數組中接收YUV NV21格式的數據,並調用應用程序的本機部分。
我的問題是,我不知道如何使用YUV數據創建3通道Mat來對其進行閾值處理。 對於閾值我想用這個代碼在android上的opencv中創建yuv墊子

Mat* threshold = new Mat(height, width, CV_8UC1);  
Scalar low(yuvPixel[0] - 50, yuvPixel[1] - 10, yuvPixel[2] - 10); 
Scalar up(yuvPixel[0] + 50, yuvPixel[1] + 10, yuvPixel[2] + 10); 
inRange(image, low, up, *threshold); 

我只知道,如何使用

Mat image(height + height/2, width, CV_8UC1, (unsigned char *)frameData); 

是否有這種墊子轉換爲3通道墊沒有簡單的方法創建1路墊?
在此先感謝。

回答

0

創建帶有YUV數據的3通道Mat。

Mat myuv(height + height/2, width, CV_8UC1, (unsigned char *)_yuv); 

用於YUV 422個數據。這些東西仔細匹配你的yuv數據格式。

「有沒有簡單的方法將此墊子轉換爲3通道墊子?」

你的意思是3通道RGB數據?如果是這樣,下面的代碼應該工作

// 
Mat myuv(height + height/2, width, CV_8UC1, (unsigned char *)_yuv); 
Mat mbgra(height, width, CV_8UC4, (unsigned char *)_bgra); 
Mat mgray(height, width, CV_8UC1, (unsigned char *)_yuv); 

// 
cvtColor(myuv, mbgra, CV_YUV420sp2BGR, 4);