Копирование небольшого изображения в кадр камеры с помощью OpenCV для Android
В настоящее время я работаю над программой, которая должна нарисовать небольшое изображение на рамке камеры. В 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)
Если вам нужна дополнительная информация, дайте мне знать.
Это