ILyaCyclone icon

Untitled

ILyaCyclone | PRO | 06/05/23 07:19:24 PM UTC | 0 ⭐ | 1494 👁️ | Never ⏰ | []
Java |

1.6 KB

|

None

|

0 👍

/

0 👎

public Mat bufferedImagetoMat(BufferedImage image, String format) throws IOException {
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        ImageIO.write(image, format, byteArrayOutputStream);
        byteArrayOutputStream.flush();
        return Imgcodecs.imdecode(new MatOfByte(byteArrayOutputStream.toByteArray()),
                Imgcodecs.IMREAD_UNCHANGED);
    }
 
 
public int[] find(Mat template, Mat screenMat) {
        // Create the result matrix
        int result_cols = screenMat.cols() - template.cols() + 1;
        int result_rows = screenMat.rows() - template.rows() + 1;
        Mat result = new Mat(result_rows, result_cols, CvType.CV_32FC1);
 
        int templateMatchingMethod = Imgproc.TM_CCOEFF_NORMED;
        // int templateMatchingMethod = Imgproc.TM_CCORR_NORMED;
        // int templateMatchingMethod = Imgproc.TM_SQDIFF_NORMED;
 
        Imgproc.matchTemplate(screenMat, template, result, templateMatchingMethod);
        Core.normalize(result, result, 0, 1, Core.NORM_MINMAX, -1, new Mat());
        org.opencv.core.Core.MinMaxLocResult mmr = Core.minMaxLoc(result);
 
        Point matchLoc;
        if( templateMatchingMethod == Imgproc.TM_SQDIFF || templateMatchingMethod == Imgproc.TM_SQDIFF_NORMED ) {
            matchLoc = mmr.minLoc;
        } else {
            matchLoc = mmr.maxLoc;
        }
 
        Imgproc.rectangle(screenMat, matchLoc, new Point(matchLoc.x + template.cols(),
                matchLoc.y + template.rows()), new Scalar(0, 255, 0));
        
        return new int[] { (int) matchLoc.x, (int) matchLoc.y };
    }

Comments