gpt4 book ai didi

android - 使用Android二进制文件使用openCV Matrix裁剪图像

转载 作者:行者123 更新时间:2023-12-02 16:43:06 25 4
gpt4 key购买 nike

我在使用Android OpenCV二进制文件裁剪图像时遇到问题。

这是我要尝试裁剪图像左上象限的操作:

Initialization {
mYuv = new Mat(mFrameSize.height + mFrameSize.height / 2, mFrameSize.width, CvType.CV_8UC1);
mGraySubmat = mYuv.submat(0, mFrameSize.height, 0, mFrameSize.width);
}


processFrame(byte[] data) {
mYuv.put(0, 0, data);
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2BGR, 4);
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.ARGB_8888);
Rect roi = new Rect(0,0,mFrameSize.width/2,mFrameSize.height/2);
Mat faceMat = new Mat(mRgba,roi);
Utils.matToBitmap(faceMat.clone(), bmp);

}

我得到的是乱码图像。我看过其他帖子说可以做我正在做的事情,但是没有用。实际上,图像看起来像在那里,但也有阴影图像不成比例。

我可以手动执行此操作,并且可以正常工作-参见下文。难道我做错了什么?
processFrame(byte[] data) {

for (int i = 0; i < frameSize; i++) {
int y = (0xff & ((int) data[i]));
rgba[i] = 0xff000000 + (y << 16) + (y << 8) + y;
}
// Example of cropping the upper left corder
bmp = Bitmap.createBitmap(mFrameSize.width/2, mFrameSize.height/2, Bitmap.Config.RGB_565);
bmp.setPixels(rgba, 0/* offset */, mFrameSize.width /* stride */, 0, 0, mFrameSize.width/2, mFrameSize.height/2);

最佳答案

我猜你是从this example开始的。在此原始资源中,您可以看到没有Imgproc.COLOR_GRAY2BGR转换。如果要获得彩色图像,则需要使用选择二:

Imgproc.cvtColor(mYuv, mRgba, Imgproc.COLOR_YUV420sp2RGB, 4);

并且您不需要mGraySubmat。

如果您需要灰度图像,那么首选是更好的选择:
Imgproc.cvtColor(mGraySubmat, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

后一种选择会截断 default preview format的色度分量,即 YCbCr_420_SP (NV21)格式的图像。

关于android - 使用Android二进制文件使用openCV Matrix裁剪图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9469730/

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