我正在尝试在Android上使用JavaCV做最基本的事情,但仍然失败。
我想将从Camera.PreviewCallback OnPreview收到的yuv byte []数组转换为灰度Mat进行进一步处理。
public void onPreviewFrame(byte[] data, Camera camera) {
/* Extract grayscale from yuv */
ByteBuffer gray = ByteBuffer.allocate(data.length * 4);
IntBuffer intBuffer = gray.asIntBuffer();
int p;
int size = width*height;
for(int i = 0; i < size; i++) {
p = data[i] & 0xFF;
intBuffer.put(0xff000000 | p<<16 | p<<8 | p);
}
Mat g = new Mat(height,width,CV_8UC3);
byte test[] = gray.array();
g.data().put(test); /* crashes here */
在我的调试检查中,由于内存不足,它似乎崩溃了。它没有给出任何错误tracke。只是这样的消息
A / libc:致命信号11(SIGSEGV),代码1,故障地址0xa0c6a000 in tid 5475(com.aztech.jcv)
我尝试过CV_8UC1,但仍然失败了。问题可能是内存不匹配。请有人建议一个工作替代方案。使用内置的cvCvtColor
无法正确解码 - 它会给出一个带有奇怪线条的全黑色垫子。