Я пытаюсь наложить на живую рамку небольшое изображение, ранее выбранное пользователем.У меня уже есть путь к изображению из предыдущей деятельности.Моя проблема в том, что я не могу показать изображение на рамке.
Я пытаюсь определить прямоугольник на рамке, а поверх прямоугольника отобразить выбранное изображение.Я мог обнаружить прямоугольник, но теперь я не могу отобразить изображение в любой части кадра (сейчас мне плевать на прямоугольник).Я пытался сделать это с объяснениями Добавление наложения изображений OpenCV для Android и добавить маленькое изображение водяного знака к большому изображению opencv4android , но у меня это не сработало.
public Mat onCameraFrame(CameraBridgeViewBase.CvCameraViewFrame inputFrame) {
Mat gray = inputFrame.gray();
Mat dst = inputFrame.rgba();
Imgproc.pyrDown(gray, dsIMG, new Size(gray.cols() / 2, gray.rows() / 2));
Imgproc.pyrUp(dsIMG, usIMG, gray.size());
Imgproc.Canny(usIMG, bwIMG, 0, threshold);
Imgproc.dilate(bwIMG, bwIMG, new Mat(), new Point(-1, 1), 1);
List<MatOfPoint> contours = new ArrayList<MatOfPoint>();
cIMG = bwIMG.clone();
Imgproc.findContours(cIMG, contours, hovIMG, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for (MatOfPoint cnt : contours) {
MatOfPoint2f curve = new MatOfPoint2f(cnt.toArray());
Imgproc.approxPolyDP(curve, approxCurve, 0.02 * Imgproc.arcLength(curve, true), true);
int numberVertices = (int) approxCurve.total();
double contourArea = Imgproc.contourArea(cnt);
if (Math.abs(contourArea) < 100) {
continue;
}
//Rectangle detected
if (numberVertices >= 4 && numberVertices <= 6) {
List<Double> cos = new ArrayList<>();
for (int j = 2; j < numberVertices + 1; j++) {
cos.add(angle(approxCurve.toArray()[j % numberVertices], approxCurve.toArray()[j - 2], approxCurve.toArray()[j - 1]));
}
Collections.sort(cos);
double mincos = cos.get(0);
double maxcos = cos.get(cos.size() - 1);
if (numberVertices == 4 && mincos >= -0.3 && maxcos <= 0.5) {
//Small watermark image
Mat a = imread(img_path);
Mat bSubmat = dst.submat(0, dst.rows() -1 , 0, dst.cols()-1);
a.copyTo(bSubmat);
}
}
}
return dst;
}
ПРИМЕЧАНИЕ. Img_path - это путь к выбранному изображению, которое я хочу отобразить в кадре.Я получил это из предыдущего упражнения.
К настоящему времени я просто хочу отобразить изображение поверх рамки.Позже я попытаюсь отобразить его в той же позиции, где он нашел прямоугольник.Пожалуйста, любые предложения или рекомендации приветствуются, так как я новичок в OpenCV.Извините за мой английский, но не стесняйтесь спрашивать меня о том, что я не правильно объяснил.Я сделаю все возможное, чтобы объяснить это лучше.Большое спасибо!