메뉴 건너뛰기

영상처리

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
import org.opencv.core.Scalar;
import org.opencv.imgcodecs.Imgcodecs;
import org.opencv.imgproc.Imgproc;

public class Main {

    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        
        Mat test = Imgcodecs.imread("C:/cv/tt.jpg");
        Mat my_mask = Mat.eye(3, 3, CvType.CV_8UC1);

        Mat test_threshold, test_gamma, test_mask;
        
        test_threshold = setThreshold(test, 150);
        test_gamma = setGamma(test, 5.0);
        test_mask = setMask(test, my_mask);
        Imgcodecs.imwrite("C:/cv/test_threshold.png", test_threshold);
        Imgcodecs.imwrite("C:/cv/test_gamma.png", test_gamma);
        Imgcodecs.imwrite("C:/cv/test_mask.png", test_mask);


    }
    
    public static Mat setThreshold(Mat image, int t) {
        Mat res = image.clone();
        Imgproc.cvtColor(res, res, Imgproc.COLOR_RGB2GRAY);
        for (int i = 0; i < res.rows(); i++) {
            for (int j = 0; j < res.cols(); j++) {
                double []datas = new double[1];
                datas = res.get(i, j);
                if(datas[0] >= t) datas[0] = 255;
                else datas[0] = 0;
                res.put(i,  j,  datas);
            }
            
        }
        return res;
    }
    
    public static Mat setGamma(Mat image, double d) {
        Mat res = image.clone();
        
        //Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);
        for (int i = 0; i < res.rows(); i++) {
            for (int j = 0; j < res.cols(); j++) {
                double []datas = new double[1];
                datas = res.get(i, j);
            
                datas[0] = (255*Math.pow(datas[0]/255, d));
                res.put(i,  j,  datas);
            }
            
        }
        return res;
    }
    

    public static Mat setMask(Mat image, Mat mask) {
        Mat res = image.clone();
        //Imgproc.cvtColor(image, image, Imgproc.COLOR_RGB2GRAY);
        Imgproc.filter2D(res, res, res.depth(), mask);
        //Imgproc.GaussianBlur(res, res, new Size(0 , 0), 10); // 가우시안

        return res;
    }
}
 

위로