본문 바로가기

Programming

OpenCV (Java) How to change Mat to Image, and save (OpenCV Mat 에서 Image 변환, 저장)

 OpenCV (Java) How to change Mat to Image, and save 


(OpenCV Mat 에서 Image 변환, 저장)




 일반적인 Mat 타입을 Image (JavaFx)로 변환하는 순서를 보면.. 2가지 종류가 있는데


1. Mat Byte 버퍼를 만든다.


2. PNG 포맷으로 mat을 encoding 하면서 버퍼에 넣는다.


3. 버퍼를 배열로 만들면서 inputstream을 붙여서 읽은 값을 Image로 만든다


or


1. Mat 을 BufferedImage로 변환한다.


2. BufferedImage 를 Image (fx) 로 변환한다.




 It's the general order of converting Mat type to Image (javaFx), there are two way..


1.  Make MatByte buffer


2. Put mat PNG format encoded to buffer


3. Connect inputstream to buffer and Make Image


or


1. Convert Mat to BufferedImage


2. Convert BufferedImage to Image (fx)




We're going to use first process.


첫번째 코드로 예시를 보자면..




e.g.


public Image matrix2Image(Mat src) {

      // create a temporary buffer

      MatOfByte buffer = new MatOfByte();

        

      // encode the frame in the buffer, according to the PNG format

      Imgcodecs.imencode(".png", src, buffer);

      

      // build and return an Image created from the image encoded in the buffer

return new Image(new ByteArrayInputStream(buffer.toArray()));

}



//and then, save



public static void saveToFile(Image image, String savePath) {

File outputFile = null;

if (savePath == null)

{

outputFile = new File("D:\\My\\Desktop/test");

}

else

{

outputFile = new File(savePath);

}

    

if (image != null)

{

BufferedImage bImage = SwingFXUtils.fromFXImage(image, null);

    try 

    {

      ImageIO.write(bImage, "png", outputFile);

    } 

    catch (IOException e) 

    {

      throw new RuntimeException(e);

    }

}

else

{

System.out.println("image null");

}

}



여기서 한참 시간을 잡아먹은 것이..


푸리에 변환을 하고 자리이동까지 마친 후의 매트릭스(CV_16F)


첫번째 프로세스에서는 encoding 하는 부분에서 에러가 나고,

두번째 프로세스에서는 bufferedImage 를 만드는 부분에서 에러가 났다.


CV_8UC ? 등만 지원을 해준다는 것이었는데... (여기서 확인 가능)



사람을 열받게 하는 것중 하나는 말을 하다가 마는 것이고..






something else..




2018/10/16 - [Programming/Image Processing] - OpenCV (Java) How to change Mat to Image, and save (OpenCV Mat 에서 Image 변환, 저장)


2018/10/16 - [Programming/Java] - Java enum class 자바 이넘 클래스


2018/10/11 - [Programming/Design Pattern ] - Design pattern - Singleton (디자인패턴 - 싱글턴)


2018/10/08 - [Algorithm/Code Signal (Code Fights)] - Aracade Intro #12 SortByHeight

2018/10/06 - [Algorithm/Code Signal (Code Fights)] - Aracade Intro #11 IsLucky

2018/10/03 - [Algorithm/Code Signal (Code Fights)] - Aracade Intro #10 CommonCharacterCount


2018/10/02 - [Programming/Image Processing] - OpenCV Java/C++ 


FourierFastTransferShift(fftshift) 푸리에 변환 후 위치 재설정 함수 (Matlab - fftshift) - (1)