Я разрабатываю приложение для обработки кадров и выполнения сегментации и сопоставления изображений в реальном времени с использованием Opencv в Android.
Основная проблема заключается в том, что мне нужно начинать эту обработку изображений только тогда, когда объект для обработкидоступно в кадре камеры, и фон не является стационарным, что усложняет мою задачу.
Я пробовал многие решения, такие как обнаружение движения, используя absdiff
, и это код
imgSource = inputFrame.rgba().t();
Core.transpose(imgSource, imgSource);
//imgSource.convertTo(enhancedMat, imgSource.type(), 1.3);
gray = imgSource;
Imgproc.cvtColor(imgSource, gray, Imgproc.COLOR_BGR2GRAY);
Imgproc.GaussianBlur(gray, gray, new Size(25, 25), 5);
if (firstframe == null) {
firstframe = gray;
}
Core.absdiff(firstframe, gray, frameDelta);
Imgproc.threshold(frameDelta, frameDelta, 25, 255, Imgproc.THRESH_BINARY);
for (int i =0 ; i <2 ; i++)
Imgproc.dilate(frameDelta, frameDelta, Imgproc.getStructuringElement(Imgproc.THRESH_BINARY, new Size(3, 3)));
Imgproc.findContours(frameDelta, abs_contours, abs_hierarchy, Imgproc.RETR_EXTERNAL, Imgproc.CHAIN_APPROX_SIMPLE);
for (int idx = 0; idx < abs_contours.size(); idx++) {
double a = Imgproc.contourArea(abs_contours.get(idx)); //Find the area of contour
if (a < 10000) {
continue;
}
Rect rect = Imgproc.boundingRect(abs_contours.get(idx));
Imgproc.rectangle(imgSource, rect.tl(), rect.br(), new Scalar(0, 255, 0), 2);
}
я такжепробовал фоновое вычитание, используя этот метод Opencv createBackgroundSubtractorMOG2
.
Ни один из них не работал, потому что фон тоже движется, поэтому эти логики совсем не устойчивы.
Есть ли какой-то подход, которому я должен следоватьили какое-либо решение для такого рода проблем?
Я надеюсь, что вы, ребята, поможете мне найти хорошее решение и заранее благодарим вас.