gpt4 book ai didi

android - 从 Camera2 图像中裁剪出一个矩形

转载 作者:行者123 更新时间:2023-11-30 00:34:49 24 4
gpt4 key购买 nike

我有一张从相机获得的 YUV_420_888 图像。我想从该图像的灰度中裁剪出一个矩形以提供给图像处理算法。这是我目前所拥有的:

public static byte[] YUV_420_888toCroppedY(Image image, Rect cropRect) {
byte[] yData;

ByteBuffer yBuffer = image.getPlanes()[0].getBuffer();

int ySize = yBuffer.remaining();

yData = new byte[ySize];

yBuffer.get(yData, 0, ySize);

if (cropRect != null) {

int cropArea = (cropRect.right - cropRect.left) * (cropRect.bottom - cropRect.top);

byte[] croppedY = new byte[cropArea];

int cropIndex = 0;

// from the top of the rectangle, to the bottom, sequentially add rows to the output array, croppedY
for (int y = cropRect.top; y < cropRect.top + cropRect.height(); y++) {

// (2x+W) * y + x
int rowStart = (2*cropRect.left + cropRect.width()) * y + cropRect.left;

// (2x+W) * y + x + W
int rowEnd = (2*cropRect.left + cropRect.width()) * y + cropRect.left + cropRect.width();

for (int x = rowStart; x < rowEnd; x++) {
croppedY[cropIndex] = yData[x];
cropIndex++;
}
}

return croppedY;
}

return yData;
}

这个函数运行没有错误,但是我得到的图像是垃圾 - 它看起来像这样:

enter image description here

我不确定如何解决这个问题或我做错了什么。

最佳答案

您的 rowStart/end 计算错误。

您需要根据源图像尺寸而不是裁剪窗口尺寸来计算行起始位置。而且我不确定你从哪里得到 2 的因子;在图像的 Y channel 中每个像素有 1 个字节。

它们应该大致是:

int yRowStride = image.getPlanes()[0].getRowStride();
..
int rowStart = y * yRowStride + cropRect.left();
int rowEnd = y * yRowStride + cropRect.left() + cropRect.width();

关于android - 从 Camera2 图像中裁剪出一个矩形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43598809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com