00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkImageToOpenCVImageFilter.h"
00019
00020 #include <itkImportImageFilter.h>
00021 #include <itkRGBPixel.h>
00022 #include <mitkImageAccessByItk.h>
00023
00024 mitk::ImageToOpenCVImageFilter::ImageToOpenCVImageFilter()
00025 : m_OpenCVImage(0)
00026 {
00027 }
00028
00029 mitk::ImageToOpenCVImageFilter::~ImageToOpenCVImageFilter()
00030 {
00031 m_OpenCVImage = 0;
00032 }
00033
00034 bool mitk::ImageToOpenCVImageFilter::CheckImage( mitk::Image* image )
00035 {
00036 if(image == 0)
00037 {
00038 MITK_WARN << "MITK Image is 0";
00039 return false;
00040 }
00041 if(image->GetDimension() != 2)
00042 {
00043 MITK_WARN << "Only 2D Images allowed";
00044 return false;
00045 }
00046 return true;
00047 }
00048
00049 IplImage* mitk::ImageToOpenCVImageFilter::GetOpenCVImage()
00050 {
00051 if(!m_OpenCVImage && this->CheckImage( m_Image ) == true )
00052 {
00053
00054 if(m_Image->GetPixelType() == typeid(unsigned char))
00055 {
00056 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, unsigned char, 2, IPL_DEPTH_8U );
00057 }
00058 else if(m_Image->GetPixelType() == typeid(char))
00059 {
00060 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, char, 2, IPL_DEPTH_8S );
00061 }
00062 else if(m_Image->GetPixelType() == typeid(unsigned short))
00063 {
00064 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, unsigned short, 2, IPL_DEPTH_16U );
00065 }
00066 else if(m_Image->GetPixelType() == typeid(short))
00067 {
00068 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, short, 2, IPL_DEPTH_16S );
00069 }
00070 else if(m_Image->GetPixelType() == typeid(int))
00071 {
00072 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, int, 2, IPL_DEPTH_32S );
00073 }
00074 else if(m_Image->GetPixelType() == typeid(float))
00075 {
00076 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, float, 2, IPL_DEPTH_32F );
00077 }
00078 else if(m_Image->GetPixelType() == typeid(double))
00079 {
00080 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, double, 2, IPL_DEPTH_64F );
00081 }
00082
00083
00084 else if(m_Image->GetPixelType() == typeid(UCRGBPixelType))
00085 {
00086 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, UCRGBPixelType, 2, IPL_DEPTH_8U );
00087 }
00088 else if(m_Image->GetPixelType() == typeid(USRGBPixelType))
00089 {
00090 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, USRGBPixelType, 2, IPL_DEPTH_16U );
00091 }
00092 else if(m_Image->GetPixelType() == typeid(FloatRGBPixelType))
00093 {
00094 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, FloatRGBPixelType, 2, IPL_DEPTH_64F );
00095 }
00096 else if(m_Image->GetPixelType() == typeid(DoubleRGBPixelType))
00097 {
00098 AccessFixedTypeByItk_1 ( m_Image.GetPointer(), ItkImageProcessing, DoubleRGBPixelType, 2, IPL_DEPTH_64F );
00099 }
00100
00101 }
00102 return m_OpenCVImage;
00103 }
00104
00105 void mitk::ImageToOpenCVImageFilter::SetImage( mitk::Image* _Image )
00106 {
00107 if(m_Image == _Image) return;
00108 m_Image = _Image;
00109 m_OpenCVImage = 0;
00110 }