Пишу небольшое приложение : добавляет картину (например, надеть очки ) на видео полученное с камеры.
void addMask(Mat src,Rect face){
Mat roi;
Imgproc.resize(mask,mask,face.size());
roi= src.submat(face);
//.copyTo(roi);
Mat maskInv= new Mat();
Mat mat1_bg = new Mat();
Mat mat2_fg = new Mat();
Mat maskGray=new Mat();
Core.extractChannel(mask,maskGray,3);
Core.bitwise_not(maskGray,maskInv);
ArrayList<Mat> roiChannels = new ArrayList<>(4);
ArrayList<Mat> roiMask = new ArrayList<>(4);
roiMask.add(new Mat());
roiMask.add(new Mat());
roiMask.add(new Mat());
roiMask.add(new Mat());
Core.split(roi,roiChannels);
Core.bitwise_and(roiChannels.get(0),maskInv,roiMask.get(0));
Core.bitwise_and(roiChannels.get(1),maskInv,roiMask.get(1));
Core.bitwise_and(roiChannels.get(2),maskInv,roiMask.get(2));
Core.bitwise_and(roiChannels.get(3),maskInv,roiMask.get(3));
Core.merge(roiMask,mat1_bg);
maskInv.release();
roi.release();
ArrayList<Mat> maskChannels = new ArrayList<>(4);
ArrayList<Mat> maskList = new ArrayList<>(4);
maskList.add(new Mat());
maskList.add(new Mat());
maskList.add(new Mat());
maskList.add(new Mat());
Core.split(mask,maskChannels);
Core.bitwise_and(maskChannels.get(0),maskGray,maskList.get(0));
Core.bitwise_and(maskChannels.get(1),maskGray,maskList.get(1));
Core.bitwise_and(maskChannels.get(2),maskGray,maskList.get(2));
Core.bitwise_and(maskChannels.get(3),maskGray,maskList.get(3));
Core.merge(maskList,mat2_fg);
maskGray.release();
Mat dst = new Mat();
Core.add(mat1_bg,mat2_fg,dst);
dst.copyTo(src.submat(face));
mat1_bg.release();
mat2_fg.release();
dst.release();
}
Если применять к статическому изображению ,то проблем нет. Но если, это видео, то с каждым кадром, верхнее изображение начинает размываться и в итоге просто белое пятно сверху на видео. Как исправить?
Спасибо.