메뉴 건너뛰기

영상처리


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

public class songizzang {
    
    public Mat threshold(Mat src, int value){
        

        Mat dst= src;
        Imgproc.cvtColor(dst,dst, Imgproc.COLOR_RGB2GRAY);//흑백변환
        
    
        int size = (int) (dst.total() * dst.channels());
        byte[] temp = new byte[size];
        dst.get(0, 0, temp);
    
        for (int i = 0; i < size; i++)
            if(temp[i]+128< (byte)value){
                temp[i]=(byte)0;
            }
            else{
                temp[i]=(byte)255;
        }
        
        
        dst.put(0, 0, temp);

        return dst;
        
    }
    
    public Mat gammaa(Mat src, double gamma){
        Mat dst= src;
        Imgproc.cvtColor(dst,dst, Imgproc.COLOR_RGB2GRAY);//흑백변환
        
        
        int size = (int) (dst.total() * dst.channels());
        
        byte[] temp = new byte[size];
        dst.get(0, 0, temp);
        System.out.println((double)temp[0]+128);

        for (int i = 0; i < size; i++){
                temp[i]=(byte)(255*(Math.pow((((double)temp[i]+128)/255),gamma)));
        }
        dst.put(0, 0, temp);

        return dst;
    }
    public Mat mask(Mat src, Mat mask){
        Mat dst= src;
        Imgproc.cvtColor(dst,dst, Imgproc.COLOR_RGB2GRAY);//흑백변환

        int size = (int) (dst.total() * dst.channels());
    
        byte[] temp = new byte[size];
        dst.get(0, 0, temp);
        for (int i = 1; i < size-1; i++){
        
            temp[i] =(byte) (   (((double)temp[i-1]+128)*-1) + (((double)temp[i]+128)*0) +  (((double)temp[i+1]+128)*1)   ) ;
        }
        dst.put(0, 0, temp);
        return dst;
    }
    
    public static void main(String args[]){
        songizzang son= new songizzang();
        
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat src= Mat.eye(3,3,CvType.CV_8UC1); //이미지 받는 타입    
        
        src  =Imgcodecs.imread("D:/opencv/lena.jpg");//이미지 읽기
        Mat dst_th =son.threshold(src, 1); //쓰레쉬 홀드
        
        src  =Imgcodecs.imread("D:/opencv/lena.jpg");//이미지 읽기
        Mat dst_gam = son.gammaa(src, 3);
        
        src  =Imgcodecs.imread("D:/opencv/lena.jpg");//이미지 읽기
        Mat m=Mat.eye(1, 3,CvType.CV_8UC1);
        m.put(0, 0, -1);
        m.put(1, 0, 0);
        m.put(2, 0, 1);
        Mat dst_mask = son.mask(src, m);
        
        Imgcodecs.imwrite("D:/opencv/lena_th.png", dst_th);//스레쉬홀드 저장
        Imgcodecs.imwrite("D:/opencv/lena_gam.png", dst_gam);//감마보정
        Imgcodecs.imwrite("D:/opencv/lena_mask.png", dst_mask);//마스크 필터
    }
}
 

위로