How to convert dicom file to jpg conversion

匿名 (未验证) 提交于 2019-12-03 01:18:02

问题:

How we can convert a dicom file(.dcm) to a jpeg image using java? Here is my code:

import java.io.File; import java.io.IOException; import org.dcm4che2.tool.dcm2jpg.Dcm2Jpg; public class MainClass { public static void main(String[] args) throws IOException{ Dcm2Jpg conv = new Dcm2Jpg(); conv.convert(new File("C:\\Users\\lijo.joseph\\Desktop\\Dicom\\IM-0001-0001.dcm"), new File("C:\\Users\\lijo.joseph\\Desktop\\Dicom\\IM-0001-0001.jpg")); } } 

and i am getting the following error while running the project

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/cli/ParseException at MainClass.main(MainClass.java:7) Caused by: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 1 more 

please help and thanks in advance

回答1:

Here is the link Converting DICOM to JPEG using dcm4che 2

Following is my code which works perfectly.I have placed it with imports so it might be use-full.

import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Iterator; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam; import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;  public class Examplke1 {      static BufferedImage myJpegImage=null;      public static void main(String[] args) {         File file = new File("test5/12840.dcm");         Iterator iterator =ImageIO.getImageReadersByFormatName("DICOM");         while (iterator.hasNext()) {             ImageReader imageReader = (ImageReader) iterator.next();             DicomImageReadParam dicomImageReadParam = (DicomImageReadParam) imageReader.getDefaultReadParam();             try {                 ImageInputStream iis = ImageIO.createImageInputStream(file);                 imageReader.setInput(iis,false);                 myJpegImage = imageReader.read(0, dicomImageReadParam);                 iis.close();                 if(myJpegImage == null){                     System.out.println("Could not read image!!");                 }             } catch (IOException e) {                 e.printStackTrace();             }             File file2 = new File("/test.jpg");             try {                 OutputStream outputStream = new BufferedOutputStream(new FileOutputStream(file2));                 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(outputStream);                 encoder.encode(myJpegImage);                 outputStream.close();             } catch (IOException e) {                 e.printStackTrace();             }             System.out.println("Completed");         }      } } 

Jars Used to Run it

  1. dcm4che-imageio-2.0.28.jar
  2. dcm4che-image-2.0.28.jar
  3. jai_imageio-1.1.jar
  4. dcm4che-core-2.0.28.jar
  5. slf4j-api-1.7.7.jar
  6. slf4j-log4j12-1.7.7.jar
  7. apache-logging-log4j.jar

Hope it helps.



回答2:

This Code is used for Converting Dicom Image to JPG Image

import java.io.File; import java.io.IOException; public class Dcm2JpgTest {     public static void main(String[] args) throws IOException {     try{             File src = new File("d:\\Test.dcm");             File dest = new File("d:\\Test.jpg");                        Dcm2Jpeg dcm2jpg= new Dcm2Jpeg();                        dcm2jpg.convert(src, dest);                      System.out.println("Completed");         } catch(IOException e){              e.printStackTrace();          } catch(Exception e){             e.printStackTrace();         }     } } 

Dcm2Jpeg.java File

import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStream; import java.util.Iterator; import java.util.List;  import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream;  import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.GnuParser; import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; import org.apache.commons.cli.ParseException; import org.dcm4che2.data.DicomObject; import org.dcm4che2.imageio.plugins.dcm.DicomImageReadParam; import org.dcm4che2.io.DicomInputStream; import org.dcm4che2.util.CloseUtils;  import com.sun.image.codec.jpeg.JPEGCodec; import com.sun.image.codec.jpeg.JPEGImageEncoder;   public class Dcm2Jpeg {      private static final String USAGE =         "dcm2jpg [Options] \n" +         "or dcm2jpg [Options] ... \n" +         "or dcm2jpg [Options] ... ";     private static final String DESCRIPTION =          "Convert DICOM image(s) to JPEG(s)\nOptions:";     private static final String EXAMPLE = null;     private int frame = 1;     private float center;     private float width;     private String vlutFct;     private boolean autoWindowing;     private DicomObject prState;     private short[] pval2gray;     private String fileExt = ".jpg";      private void setFrameNumber(int frame) {         this.frame = frame;     }      private void setWindowCenter(float center) {         this.center = center;             }      private void setWindowWidth(float width) {         this.width = width;            }      public final void setVoiLutFunction(String vlutFct) {         this.vlutFct = vlutFct;     }          private final void setAutoWindowing(boolean autoWindowing) {         this.autoWindowing = autoWindowing;     }      private final void setPresentationState(DicomObject prState) {         this.prState = prState;             }      private final void setPValue2Gray(short[] pval2gray) {         this.pval2gray = pval2gray;     }      public final void setFileExt(String fileExt) {         this.fileExt = fileExt;     }      public void convert(File src, File dest) throws IOException {         Iterator iter = ImageIO.getImageReadersByFormatName("DICOM");         ImageReader reader = iter.next();         DicomImageReadParam param =              (DicomImageReadParam) reader.getDefaultReadParam();         param.setWindowCenter(center);         param.setWindowWidth(width);         param.setVoiLutFunction(vlutFct);         param.setPresentationState(prState);         param.setPValue2Gray(pval2gray);         param.setAutoWindowing(autoWindowing);         ImageInputStream iis = ImageIO.createImageInputStream(src);         BufferedImage bi;         OutputStream out = null;         try {             reader.setInput(iis, false);             bi = reader.read(frame - 1, param);             if (bi == null) {                 System.out.println("\nError: " + src + " - couldn't read!");                 return;             }             out = new BufferedOutputStream(new FileOutputStream(dest));             JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(out);             enc.encode(bi);         } finally {             CloseUtils.safeClose(iis);             CloseUtils.safeClose(out);         }         //System.out.print('.');     }      public int mconvert(List args, int optind, File destDir)             throws IOException {         int count = 0;         for (int i = optind, n = args.size() - 1; i  0 && !dest.exists()) {             dest.mkdirs();         }         int count = 0;         for (int i = 0; i  argList = cl.getArgList();         int argc = argList.size();          File dest = new File(argList.get(argc-1));         long t1 = System.currentTimeMillis();         int count = 1;         if (dest.isDirectory()) {             count = dcm2jpg.mconvert(argList, 0, dest);         } else {             File src = new File(argList.get(0));             if (argc > 2 || src.isDirectory()) {                 exit("dcm2jpg: when converting several files, "                         + "last argument must be a directory\n");             }             dcm2jpg.convert(src, dest);         }         long t2 = System.currentTimeMillis();         System.out.println("\nconverted " + count + " files in " + (t2 - t1)                 / 1000f + " s.");     }      private static DicomObject loadDicomObject(File file) {         DicomInputStream in = null;         try {             in = new DicomInputStream(file);             return in.readDicomObject();         } catch (IOException e) {             exit(e.getMessage());             throw new RuntimeException();         } finally {             CloseUtils.safeClose(in);         } }  private static short[] loadPVal2Gray(File file) {         BufferedReader r = null;         try {             r = new BufferedReader(new InputStreamReader(new FileInputStream(                     file)));             short[] pval2gray = new short[256];             int n = 0;             String line;             while ((line = r.readLine()) != null) {                 try {                     int val = Integer.parseInt(line.trim());                     if (n == pval2gray.length) {                         if (n == 0x10000) {                             exit("Number of entries in " + file + " > 2^16");                         }                         short[] tmp = pval2gray;                         pval2gray = new short[n = min && i 

Jars Files Used to Run this code

  1. dcm4che-core-2.0.23.jar
  2. dcm4che-image-2.0.23.jar
  3. dcm4che-imageio-2.0.23.jar
  4. dcm4che-imageio-rle-2.0.23.jar
  5. slf4j-log4j12-1.5.0.jar
  6. slf4j-api-1.5.0.jar
  7. log4j-1.2.13.jar
  8. commons-cli-1.2.jar

If you don't want to use direct Dcm2Jpg.java file then you can include below jar file.

dcm4che-tool-dcm2jpg-2.0.23.jar

In this jar you can import org.dcm4che2.tool.dcm2jpg.Dcm2Jpg this java file



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!