public static ImageCV applyShutter(Mat source, RenderedImage imgOverlay, Color color) {
ImageCV srcImg = ImageCV.toImageCV(Objects.requireNonNull(source));
Mat mask = ImageConversion.toMat(Objects.requireNonNull(imgOverlay));
if (isGray(color) && srcImg.channels() == 1) {
Mat grayImg = new Mat(srcImg.size(), CvType.CV_8UC1, new Scalar(color.getRed()));
ImageCV dstImg = new ImageCV();
srcImg.copyTo(dstImg);
grayImg.copyTo(dstImg, mask);
return dstImg;
}
ImageCV dstImg = new ImageCV();
if (srcImg.channels() < 3) {
Imgproc.cvtColor(srcImg, dstImg, Imgproc.COLOR_GRAY2BGR);
}
else {
srcImg.copyTo(dstImg);
}
Mat colorImg =
new Mat(dstImg.size(), CvType.CV_8UC3, new Scalar(color.getBlue(), color.getGreen(), color.getRed()));
colorImg.copyTo(dstImg, mask);
return dstImg;
}