private Mat matMulti(Mat mat, int channels) { if (mat.type() != CvType.CV_8UC1 || mat.channels() == channels) { return mat; } List<Mat> listMat = new ArrayList<>(); for (int n = 0; n < channels; n++) { listMat.add(mat); } Mat mResult = Element.getNewMat(); Core.merge(listMat, mResult); return mResult; }
private Mat featuresVectorBinarization(Mat fv){ int size = (int) fv.total() * fv.channels(); double[] buff = new double[size]; fv.get(0, 0, buff); for(int i = 0; i < size; i++) { buff[i] = (buff[i] >= 0) ? 1 : 0; } Mat bv = new Mat(fv.size(), CvType.CV_8U); bv.put(0, 0, buff); return bv; }
public static Mat detectEdges(Mat mSource) { Mat mSourceGray = Element.getNewMat(); Mat mDetectedEdges = Element.getNewMat(); int edgeThresh = 1; int lowThreshold = 100; int ratio = 3; int kernelSize = 5; int blurFilterSize = 3; if (mSource.channels() == 1) { mSourceGray = mSource; } else { Imgproc.cvtColor(mSource, mSourceGray, toGray); } Imgproc.blur(mSourceGray, mDetectedEdges, new Size(blurFilterSize, blurFilterSize)); Imgproc.Canny(mDetectedEdges, mDetectedEdges, lowThreshold, lowThreshold * ratio, kernelSize, false); return mDetectedEdges; } //</editor-fold>
private Mat doFindMatch(Element target, Mat mBase, Element probe) { if (SX.isNull(probe)) { probe = target; } Mat mResult = Element.getNewMat(); Mat mProbe = probe.getContentBGR(); if (!target.isPlainColor()) { if (probe.hasMask()) { Mat mMask = matMulti(probe.getMask(), mProbe.channels()); Imgproc.matchTemplate(mBase, mProbe, mResult, Imgproc.TM_CCORR_NORMED, mMask); } else { Imgproc.matchTemplate(mBase, mProbe, mResult, Imgproc.TM_CCOEFF_NORMED); } } else { Mat mBasePlain = mBase; Mat mProbePlain = mProbe; if (target.isBlack()) { Core.bitwise_not(mBase, mBasePlain); Core.bitwise_not(mProbe, mProbePlain); } if (probe.hasMask()) { Mat mMask = matMulti(probe.getMask(), mProbe.channels()); Imgproc.matchTemplate(mBasePlain, mProbePlain, mResult, Imgproc.TM_SQDIFF_NORMED, mMask); } else { Imgproc.matchTemplate(mBasePlain, mProbePlain, mResult, Imgproc.TM_SQDIFF_NORMED); } Core.subtract(Mat.ones(mResult.size(), CvType.CV_32F), mResult, mResult); } return mResult; }
/** * Convert the given Mat to grayscale. Conversion is done in place and if the Mat is already * grayscale nothing is done. * * @param mat * @return */ public static Mat toGray(Mat mat) { if (mat.channels() == 1) { return mat; } Imgproc.cvtColor(mat, mat, Imgproc.COLOR_BGR2GRAY); return mat; }
public static BufferedImage mat2Img(Mat in) { BufferedImage out; byte[] data = new byte[320 * 240 * (int)in.elemSize()]; int type; in.get(0, 0, data); if(in.channels() == 1) type = BufferedImage.TYPE_BYTE_GRAY; else type = BufferedImage.TYPE_3BYTE_BGR; out = new BufferedImage(320, 240, type); out.getRaster().setDataElements(0, 0, 320, 240, data); return out; }
public Image toBufferedImage(Mat matrix){ int type = BufferedImage.TYPE_BYTE_GRAY; if ( matrix.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = matrix.channels()*matrix.cols()*matrix.rows(); byte [] buffer = new byte[bufferSize]; matrix.get(0,0,buffer); // get all the pixels BufferedImage image = new BufferedImage(matrix.cols(),matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, targetPixels, 0, buffer.length); return image; }
public BufferedImage toBufferedImage(Mat matrix){ int type = BufferedImage.TYPE_BYTE_GRAY; if ( matrix.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = matrix.channels()*matrix.cols()*matrix.rows(); byte [] buffer = new byte[bufferSize]; matrix.get(0,0,buffer); // get all the pixels BufferedImage image = new BufferedImage(matrix.cols(),matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, targetPixels, 0, buffer.length); return image; }
public BufferedImage toBufferedImage(Mat matrix){ int type = BufferedImage.TYPE_BYTE_GRAY; if ( matrix.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = matrix.channels()*matrix.cols()*matrix.rows(); byte [] buffer = new byte[bufferSize]; matrix.get(0,0,buffer); // get all the pixels BufferedImage image = new BufferedImage(matrix.cols(),matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, targetPixels, 0, buffer.length); return image; }
public BufferedImage toBufferedImage(Mat mat) { int type = BufferedImage.TYPE_BYTE_GRAY; if (mat.channels() > 1) { type = BufferedImage.TYPE_3BYTE_BGR; } byte[] bytes = new byte[mat.channels() * mat.cols() * mat.rows()]; mat.get(0, 0, bytes); BufferedImage img = new BufferedImage(mat.cols(), mat.rows(), type); final byte[] pixels = ((DataBufferByte) img.getRaster().getDataBuffer()).getData(); System.arraycopy(bytes, 0, pixels, 0, bytes.length); return img; }
public Image toBufferedImage(Mat matrix){ int type = BufferedImage.TYPE_BYTE_GRAY; if ( matrix.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = matrix.channels()*matrix.cols()*matrix.rows(); byte [] buffer = new byte[bufferSize]; matrix.get(0,0,buffer); // get all the pixels BufferedImage image = new BufferedImage(matrix.cols(),matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(buffer, 0, targetPixels, 0, buffer.length); return image; }
public Image toBufferedImage(Mat m){ int type = BufferedImage.TYPE_BYTE_GRAY; if ( m.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = m.channels()*m.cols()*m.rows(); byte [] b = new byte[bufferSize]; m.get(0,0,b); // get all the pixels BufferedImage image = new BufferedImage(m.cols(),m.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(b, 0, targetPixels, 0, b.length); return image; }
private Image mat2Image(Mat frame) { int type = BufferedImage.TYPE_BYTE_GRAY; if ( frame.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } int bufferSize = frame.channels()*frame.cols()*frame.rows(); byte [] b = new byte[bufferSize]; frame.get(0,0,b); // get all the pixels BufferedImage image = new BufferedImage(frame.cols(),frame.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(b, 0, targetPixels, 0, b.length); return SwingFXUtils.toFXImage(image,null); }
public void updateImage(Mat matrix) { int type = BufferedImage.TYPE_BYTE_GRAY; if (matrix.channels() > 1) { type = BufferedImage.TYPE_3BYTE_BGR; } byte[] b = new byte[matrix.channels() * matrix.cols() * matrix.rows()]; matrix.get(0, 0, b); image = new BufferedImage(matrix.cols(), matrix.rows(), type); final byte[] targetPixels = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); System.arraycopy(b, 0, targetPixels, 0, b.length); repaint(); }
public static BufferedImage bufferedImage(Mat m) { int type = BufferedImage.TYPE_BYTE_GRAY; if ( m.channels() > 1 ) { type = BufferedImage.TYPE_3BYTE_BGR; } BufferedImage image = new BufferedImage(m.cols(),m.rows(), type); m.get(0,0,((DataBufferByte)image.getRaster().getDataBuffer()).getData()); // get all the pixels return image; }
private static void printMatI(Mat mat) { int[] data = new int[mat.channels()]; for (int r = 0; r < mat.rows(); r++) { for (int c = 0; c < mat.cols(); c++) { mat.get(r, c, data); log(lvl, "(%d, %d) %s", r, c, Arrays.toString(data)); } } }
String filename = "/storage/emulated/0/image.png"; File file = new File(filename); Mat image= Highgui.imread(filename, 0);//temp mat Mat mat2DImg; if (image.width() > 0) { mat2DImg = new Mat(image.size(), image.type()); Imgproc.cvtColor(image, mat2DImg, Imgproc.COLOR_BGR2RGB);// you can use Imgproc.COLOR_BGR2GRAY to get a gray image Log.d(TAG, "mat2DImg: " + "chans: " + image.channels() + ", (" + image.width() + ", " + image.height() + ")"); image.release(); image = null; }
@Override public Result process(CvPipeline pipeline) throws Exception { Mat mat = pipeline.getWorkingImage(); if(mat.channels()==1) { Core.normalize(mat, mat, 0, 255, Core.NORM_MINMAX); } else { filter(mat); } return new Result(mat); } }
Mat A = Highgui.imread(image_addr); //"image_addr" is the address of the image Mat C = A.clone(); A.convertTo(A, CvType.CV_64FC3); // New line added. int size = (int) (A.total() * A.channels()); double[] temp = new double[size]; // use double[] instead of byte[] A.get(0, 0, temp); for (int i = 0; i < size; i++) temp[i] = (temp[i] / 2); // no more casting required. C.put(0, 0, temp);
static boolean isEqual(Frame frame, org.opencv.core.Mat mat) { return mat != null && frame != null && frame.image != null && frame.image.length > 0 && frame.imageWidth == mat.cols() && frame.imageHeight == mat.rows() && frame.imageChannels == mat.channels() && getMatDepth(frame.imageDepth) == mat.depth() && new Pointer(frame.image[0].position(0)).address() == mat.dataAddr(); } public org.opencv.core.Mat convertToOrgOpenCvCoreMat(Frame frame) {