gpt4 book ai didi

java - 使用 OpenCV for Android 将小图像复制到相机框架中

转载 作者:太空狗 更新时间:2023-10-29 15:53:25 27 4
gpt4 key购买 nike

我目前正在开发一个程序,可以在相机框架上绘制一个小图像。使用 Android OpenCV,您可以使用以下函数来处理帧:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {

Mat rgba = inputFrame.rgba();

mDetector.setFrame(rgba);
mDetector.processFrame();

return rgba;
}

然后 Mat rgba 会显示在屏幕上。我的检测器现在应该处理帧 rgba(更改它)。相关代码如下:

public void processFrame() {

// (1) Doesn't work
Rect roi = new Rect(0, 0, 100, 100);
Mat submat = mOutputFrame.submat(roi);
Mat image = new Mat(100, 100, CvType.CV_8UC3, new Scalar(0,0,0));
image.copyTo(submat);

// (2) Does work
// --- mComparatorImage is the same size as mOutputFrame.
// --- mComparatorImage is 8bit greyscale, mOutputFrame is the rgba CameraFrame
mComparatorImage = mComparatorHolder.getCurrentImage();
mComparatorImage.copyTo(mOutputFrame);

// (3) Should work (but doesn't)
Imgproc.resize(mComparatorImage, mResizedImageClone, new Size (200, 100));
Mat bSubmat = mOutputFrame.submat(new Rect(0, 0, 200, 100));
mResizedImageClone.copyTo(bSubmat);
}

我要做的是将调整大小后的 mComparatorImage 复制到 mOutputFrame (mOutputFrame = rgba) 引用的相机帧中。

所以我尝试做 (3)。仅供引用:mResizedImageClone 是 Mat 类型并被初始化为一个新的 Mat()

执行 (3) 不会更改 mOutputFrame。

(2) 然后我尝试将整个 mComparatorImage(类型为 Mat 且大小与 mOutputFrame 相同)复制到 mOutputFrame。这出人意料地有效。

(1) 然后我认为问题必须出在 submat 上,因为复制大图像有效,但将它的小版本复制到 mOutputFrame 中却不行。所以我尝试将一个黑色的小图像复制到 mOutputFrame 中。这也不起作用,尽管我在这里遵循了其他答案。

可能是什么问题?没有错误,但相机框架在(1)和(3)中保持不变

如果您需要任何其他信息,请告诉我。

伊萨

最佳答案

好的,我找到了,有点棘手。

只有当 src 和 dest Mat 的类型相同时,使用子矩阵的 copyTo 函数才能正常工作。否则,它只是......什么都没有。 (它更应该提示!)

我没有使用 rect,而是使用了带有参数(row_start、row_end、col_start、col_end)的 submat

另请注意,submat 的尺寸(#cols 和#rows)必须与 copyTo 中使用的 src 图像完全匹配。

所以这是我对 (1) 的解决方案:

// (1) Inserting a little black rect into the camera frame:
Mat submat = mOutputFrame.submat(0, 100, 0, 100);
Mat image = new Mat(100, 100, mOutputFrame.type(), new Scalar(0,0,0));
image.copyTo(submat);

我对 (3) 的解决方案:

// (3) Resizing and inserting an arbitrary grey image into the rgba camera frame
Imgproc.resize(mComparatorImage, mResizedImageClone, new Size (200, 100));
Imgproc.cvtColor(mResizedImageClone, mResizedImageClone, Imgproc.COLOR_GRAY2RGBA);
Mat submat = mOutputFrame.submat(0, 100, 0, 200);
mResizedImageClone.copyTo(submat);

关于java - 使用 OpenCV for Android 将小图像复制到相机框架中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22428448/

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