2015-01-02 3 views
0

예를 들어 1000 개의 이미지가 있고 그 이름은 모두 매우 유사하며 숫자가 서로 다릅니다. "ImageNmbr0001", "ImageNmbr0002", ....., ImageNmbr1000 등. 모든 이미지를 가져 와서 ImageProcessor Array에 저장하고 싶습니다.배열에서 많은 그림과 참조를로드하는 좋은 방법은 무엇입니까? - Java + ImageJ

예를 들어이 배열의 요소에 대해 메서드를 사용하면이 메서드가 그림에 적용됩니다. 예를 들어 검정 픽셀을 계산합니다. for 루프를 사용하여 1에서 1000까지의 숫자를 가져 와서 문자열로 변환하고로드 할 파일 이름의 하위 문자열을 만든 다음 문자열 번호를 다시 파일 이름에 첨부하고 해당 이미지를로드하도록 할 수 있습니다. 그러나 배열로 저장할 수있는 요소로 어떻게 든 전환해야하고 아직 파일 경로가 문자열을 수신하고 끝에 저장되어있는 해당 ImageProcessor를 반환하는 메서드가 아직 없습니다.

또한 지금 내 접근 방식은 다소 서투른 것처럼 보이고 너무 우아하지 않습니다. 누군가가 나에게 보여줄 수 있다면 그래서 나는 매우 행복 할 것이다 더 나은 해당 패키지에서 사용하는 방법 그렇게하려면 다음

import ij.ImagePlus; 
import ij.plugin.filter.PlugInFilter; 
import ij.process.ImageProcessor; 

가 나는 해결책을 찾을 생각한다, 그 일을 할

Opener opener = new Opener(); 
String imageFilePath = "somePath"; 
ImagePlus imp = opener.openImage(imageFilePath); 
ImageProcesser ip = imp.getProcessor(); 

을하지만, 시간/노력에 감사드립니다.

+0

Google에 귀하의 접근 방식을 보여주십시오. –

+0

ImageProcessor Array를 이미지로 채우는 방법을 모르겠습니다. 또한 설명 된 메서드를 사용하여 저장할 그림의 이름이 모두 들어있는 문자열 배열을 만들 수 있습니다. 나는 지금까지 이것을 코딩하지 않았지만 코드의 해당 부분의 길이가 너무 길다는 것과 별개로 문제를 보지 않는다. 올바른 방법을 알고 있다면 더 좋은 해결책이 될 것이다. 그 중 하나를 위해, 아마 사소한 변경/fixe와 함께 그것은 원활하게 작동합니다. – Imago

+0

도움이 될 경우 필요할 때까지 이미지를로드하지 마십시오. – MadProgrammer

답변

0

나는 당신이 원하는 것을 확실하게 할 지 확신하지 못합니다. 그러나 두 가지 이유로 각 이미지의 각 정보를 별도의 파일에 저장하지 않을 것입니다 : - 여러 파일의 내용을 저장하고 읽는 것이 더 느립니다. 1 개의 중간 크기 파일과 비교하십시오 - 각 파일은 오버 헤드를 추가합니다 (파일에 경로, 디스크의 최소 크기 등 필요)

성능을 원하면 단일 설명 파일에 여러 이미지 설명을 그룹화하십시오.

이진 설명 파일을 만들고 싶지 않다면 데이터베이스를 빌드 할 수 있으며 읽기 성능과 일반적으로 저장 성능을 항상 사용할 수 있습니다. 나는 당신이 고정 된 크기의 데이터를 바이너리 파일을 시도하고 읽을 수 추측 exacly 어떤 요구를하지만, 잘 모릅니다

나중에

예 :이 예에서

public static void main(String[] args) throws IOException { 
    FileOutputStream fout = null; 
    FileInputStream fin = null; 

    try { 
     fout = new FileOutputStream("description.bin"); 
     DataOutputStream dout = new DataOutputStream(fout); 

     for (int x = 0; x < 1000; x++) { 
      dout.writeInt(10); // Write Int data 
     } 

     fin = new FileInputStream("description.bin"); 
     DataInputStream din = new DataInputStream(fin); 
     for (int x = 0; x < 1000; x++) { 
      System.out.println(din.readInt()); // Read Int data 
     } 
    } catch (Exception e) { 

    } finally { 
     if (fout != null) { 
      fout.close(); 
     } 
     if (fin != null) { 
      fin.close(); 
     } 
    } 
} 

의 코드는 "description.bin"파일에 정수를 쓰고 읽습니다. Java가 파일에 기본적으로 "채널"을 사용하므로 Java에서 매우 빠릅니다.