public static ImageCV toImageCV(Mat source) { if (source instanceof ImageCV) { return (ImageCV) source; } ImageCV dstImg = new ImageCV(); source.assignTo(dstImg); return dstImg; }
public ImageCV toImageCV() { if (this instanceof Mat) { if (this instanceof ImageCV) { return this; } ImageCV dstImg = new ImageCV(); this.assignTo(dstImg); return dstImg; } else { throw new IllegalAccessError("Not implemented yet"); } }
public static ImageCV rescaleToByte(Mat source, double alpha, double beta) { ImageCV dstImg = new ImageCV(); Objects.requireNonNull(source).convertTo(dstImg, CvType.CV_8U, alpha, beta); return dstImg; }
public static ImageCV combineTwoImages(Mat source, Mat imgOverlay, int transparency) { Mat srcImg = Objects.requireNonNull(source); Mat src2Img = Objects.requireNonNull(imgOverlay); ImageCV dstImg = new ImageCV(); Core.addWeighted(srcImg, 1.0, src2Img, transparency, 0.0, dstImg); return dstImg; }
public static ImageCV warpAffine(Mat source, Mat matrix, Size boxSize, Integer interpolation) { if (matrix == null) { return (ImageCV) source; } // System.out.println(matrix.dump()); Mat srcImg = Objects.requireNonNull(source); ImageCV dstImg = new ImageCV(); if (interpolation == null) { interpolation = Imgproc.INTER_LINEAR; } Imgproc.warpAffine(srcImg, dstImg, matrix, boxSize, interpolation); return dstImg; }
public static ImageCV scale(Mat source, Dimension dim) { if (Objects.requireNonNull(dim).width < 1 || dim.height < 1) { throw new IllegalArgumentException("Unsupported size: " + dim); } ImageCV dstImg = new ImageCV(); Imgproc.resize(Objects.requireNonNull(source), dstImg, new Size(dim.getWidth(), dim.getHeight())); return dstImg; }
public static ImageCV getRotatedImage(Mat source, int rotateCvType) { if (rotateCvType < 0) { return ImageCV.toImageCV(source); } Mat srcImg = Objects.requireNonNull(source); ImageCV dstImg = new ImageCV(); Core.rotate(srcImg, dstImg, rotateCvType); return dstImg; }
public static ImageCV flip(Mat source, int flipCvType) { if (flipCvType < 0) { return ImageCV.toImageCV(source); } Objects.requireNonNull(source); ImageCV dstImg = new ImageCV(); Core.flip(source, dstImg, flipCvType); return dstImg; }
public static ImageCV scale(Mat source, Dimension dim, Integer interpolation) { if (interpolation == null || interpolation < Imgproc.INTER_NEAREST || interpolation > Imgproc.INTER_LANCZOS4) { return scale(source, dim); } if (Objects.requireNonNull(dim).width < 1 || dim.height < 1) { throw new IllegalArgumentException("Unsupported size: " + dim); } ImageCV dstImg = new ImageCV(); Imgproc.resize(Objects.requireNonNull(source), dstImg, new Size(dim.getWidth(), dim.getHeight()), 0, 0, interpolation); return dstImg; }
public static ImageCV filter(Mat source, KernelData kernel) { Objects.requireNonNull(kernel); Mat srcImg = Objects.requireNonNull(source); Mat k = new Mat(kernel.getHeight(), kernel.getWidth(), CvType.CV_32F); k.put(0, 0, kernel.getData()); ImageCV dstImg = new ImageCV(); Imgproc.filter2D(srcImg, dstImg, -1, k); // TODO improve speed with dedicated call // Imgproc.blur(srcImg, dstImg, new Size(3,3)); return dstImg; }
public static ImageCV bitwiseAnd(Mat source, int src2Cst) { Objects.requireNonNull(source); ImageCV mask = new ImageCV(source.size(), source.type(), new Scalar(src2Cst)); Core.bitwise_and(source, mask, mask); return mask; }
public static ImageCV buildThumbnail(PlanarImage source, Dimension iconDim, boolean keepRatio) { Objects.requireNonNull(source); if (Objects.requireNonNull(iconDim).width < 1 || iconDim.height < 1) { throw new IllegalArgumentException("Unsupported size: " + iconDim); } final double scale = Math.min(iconDim.getHeight() / source.height(), iconDim.getWidth() / source.width()); if (scale >= 1.0) { return source.toImageCV(); } if (scale < 0.005) { return null; // Image is too large to be converted } Size dim = keepRatio ? new Size((int) (scale * source.width()), (int) (scale * source.height())) : new Size(iconDim.width, iconDim.height); Mat srcImg = Objects.requireNonNull(source).toMat(); ImageCV dstImg = new ImageCV(); Imgproc.resize(srcImg, dstImg, dim, 0, 0, Imgproc.INTER_AREA); return dstImg; }
public static ImageCV applyShutter(Mat source, Shape shape, Color color) { Mat srcImg = Objects.requireNonNull(source); Mat mask = Mat.zeros(srcImg.size(), CvType.CV_8UC1); List<MatOfPoint> pts = transformShapeToContour(shape, true); Imgproc.fillPoly(mask, pts, new Scalar(1)); ImageCV dstImg = new ImageCV(srcImg.size(), srcImg.type(), new Scalar(color.getBlue(), color.getGreen(), color.getRed())); srcImg.copyTo(dstImg, mask); return dstImg; }
private static void writeRasterInRaw(PlanarImage image, FileRawImage[] newSeries, ImageCV[] builImgs, ViewParameter params, int dstHeight, int imgIndex) throws IOException { ImageCV img = ImageProcessor.getRotatedImage(image.toMat(), params.rotateCvType); if (newSeries != null && img != null && img.height() == newSeries.length) { if (newSeries[0] == null) { File dir = new File(MPR_CACHE_DIR, params.seriesUID); dir.mkdirs(); for (int i = 0; i < newSeries.length; i++) { newSeries[i] = new FileRawImage(new File(dir, "mpr_" + (i + 1) + ".wcv"));//$NON-NLS-1$ //$NON-NLS-2$ builImgs[i] = new ImageCV(dstHeight, img.width(), img.type()); } } for (int j = 0; j < newSeries.length; j++) { img.row(j).copyTo(builImgs[j].row(imgIndex - 1)); } } }
public static ImageCV minStack(List<ImageElement> sources) { if (sources.size() > 1) { ImageElement firstImg = sources.get(0); ImageCV dstImg = new ImageCV(); PlanarImage img = firstImg.getImage(null, false); img.toMat().copyTo(dstImg); int numbSrc = sources.size(); for (int i = 1; i < numbSrc; i++) { ImageElement imgElement = sources.get(i); PlanarImage image = imgElement.getImage(null, false); if (image.width() != dstImg.width() && image.height() != dstImg.height()) { continue; } if (image instanceof Mat) { Core.min(dstImg, (Mat) image, dstImg); } } return dstImg; } return null; }
public static ImageCV maxStack(List<ImageElement> sources) { if (sources.size() > 1) { ImageElement firstImg = sources.get(0); ImageCV dstImg = new ImageCV(); PlanarImage img = firstImg.getImage(null, false); img.toMat().copyTo(dstImg); int numbSrc = sources.size(); for (int i = 1; i < numbSrc; i++) { ImageElement imgElement = sources.get(i); PlanarImage image = imgElement.getImage(null, false); if (image.width() != dstImg.width() && image.height() != dstImg.height()) { continue; } if (image instanceof Mat) { Core.max(dstImg, (Mat) image, dstImg); } } return dstImg; } return null; } }
public static ImageCV applyLUT(Mat source, byte[][] lut) { Mat srcImg = Objects.requireNonNull(source); int lutCh = Objects.requireNonNull(lut).length; Mat lutMat; if (lutCh > 1) { lutMat = new Mat(); List<Mat> luts = new ArrayList<>(lutCh); for (int i = 0; i < lutCh; i++) { Mat l = new Mat(1, 256, CvType.CV_8U); l.put(0, 0, lut[i]); luts.add(l); } Core.merge(luts, lutMat); if (srcImg.channels() < lut.length) { Imgproc.cvtColor(srcImg.clone(), srcImg, Imgproc.COLOR_GRAY2BGR); } } else { lutMat = new Mat(1, 256, CvType.CV_8UC1); lutMat.put(0, 0, lut[0]); } ImageCV dstImg = new ImageCV(); Core.LUT(srcImg, lutMat, dstImg); return dstImg; }
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; }
public static ImageCV getRotatedImage(Mat source, double angle, double centerx, double centery) { if (isEqualToZero(angle)) { return ImageCV.toImageCV(source); } Mat srcImg = Objects.requireNonNull(source); Point ptCenter = new Point(centerx, centery); Mat rot = Imgproc.getRotationMatrix2D(ptCenter, -angle, 1.0); ImageCV dstImg = new ImageCV(); // determine bounding rectangle Rect bbox = new RotatedRect(ptCenter, srcImg.size(), -angle).boundingRect(); // double[] matrix = new double[rot.cols() * rot.rows()]; // // adjust transformation matrix // rot.get(0, 0, matrix); // matrix[2] += bbox.width / 2.0 - centerx; // matrix[rot.cols() + 2] += bbox.height / 2.0 - centery; // rot.put(0, 0, matrix); Imgproc.warpAffine(srcImg, dstImg, rot, bbox.size()); return dstImg; }
public static ImageCV applyCropMask(Mat source, Rectangle b, double alpha) { Mat srcImg = Objects.requireNonNull(source); ImageCV dstImg = new ImageCV(); source.copyTo(dstImg); if(b.getY() > 0) { Imgproc.rectangle(dstImg, new Point(0.0, 0.0), new Point(dstImg.width(), b.getMinY() ), new Scalar(0), -1); } if(b.getX() > 0) { Imgproc.rectangle(dstImg, new Point(0.0, b.getMinY()), new Point(b.getMinX(), b.getMaxY() ), new Scalar(0), -1); } if(b.getX() < dstImg.width()) { Imgproc.rectangle(dstImg, new Point(b.getMaxX(), b.getMinY()), new Point(dstImg.width(), b.getMaxY() ), new Scalar(0), -1); } if(b.getY() < dstImg.height()) { Imgproc.rectangle(dstImg, new Point(0.0, b.getMaxY()), new Point(dstImg.width(), dstImg.height() ), new Scalar(0), -1); } Core.addWeighted(dstImg, alpha, srcImg, 1- alpha, 0.0, dstImg); return dstImg; }