diff --git a/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.cpp b/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.cpp index aefda85d50..a30414cb9b 100644 --- a/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.cpp +++ b/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.cpp @@ -1,117 +1,114 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #include "mitkImageToOpenCVImageFilter.h" #include #include #include namespace mitk{ ImageToOpenCVImageFilter::ImageToOpenCVImageFilter() - : m_OpenCVImage(nullptr) { m_sliceSelector = ImageSliceSelector::New(); } ImageToOpenCVImageFilter::~ImageToOpenCVImageFilter() { - m_OpenCVImage = nullptr; } void ImageToOpenCVImageFilter::SetImage( Image* _Image ) { m_Image = _Image; } Image* ImageToOpenCVImageFilter::GetImage() { return m_Image.Lock(); } bool ImageToOpenCVImageFilter::CheckImage( Image* image ) { if(image == nullptr) { MITK_WARN << "MITK Image is 0"; return false; } if(image->GetDimension() > 2 ) { MITK_WARN << "Only 2D Images allowed"; return false; } return true; } - IplImage* ImageToOpenCVImageFilter::GetOpenCVImage() + cv::Mat ImageToOpenCVImageFilter::GetOpenCVImage() { auto image = m_Image.Lock(); if(!this->CheckImage(image)) - return nullptr; + return cv::Mat(); - m_OpenCVImage = (nullptr); try { AccessFixedTypeByItk(image.GetPointer(), ItkImageProcessing, MITK_ACCESSBYITK_PIXEL_TYPES_SEQ // gray image (UCRGBPixelType)(USRGBPixelType)(FloatRGBPixelType)(DoubleRGBPixelType), // rgb image (2) // dimensions ) } catch (const AccessByItkException& e) { std::cout << "Caught exception [from AccessFixedTypeByItk]: \n" << e.what() << "\n"; - return nullptr; + return cv::Mat(); } return m_OpenCVImage; } cv::Mat ImageToOpenCVImageFilter::GetOpenCVMat() { - IplImage* img = this->GetOpenCVImage(); + cv::Mat mat = this->GetOpenCVImage(); - cv::Mat mat; - if( img ) - { - // do not copy data, then release just the header - mat = cv::cvarrToMat(img, false); - cvReleaseImageHeader( &img ); - } + //cv::Mat mat; + //if( img ) + //{ + // // do not copy data, then release just the header + // mat = cv::cvarrToMat(img, false); + // cvReleaseImageHeader( &img ); + //} return mat; } template void ImageToOpenCVImageFilter::ItkImageProcessing( itk::Image* image ) { - m_OpenCVImage = itk::OpenCVImageBridge::ITKImageToIplImage(image); + m_OpenCVImage = itk::OpenCVImageBridge::ITKImageToCVMat(image); } void ImageToOpenCVImageFilter::SetInputFromTimeSlice(Image::Pointer mitkImage, int timeStep, int slice) { m_sliceSelector->SetInput(mitkImage); m_sliceSelector->SetSliceNr(slice); m_sliceSelector->SetTimeNr(timeStep); m_sliceSelector->Update(); this->SetImage(m_sliceSelector->GetOutput()); } } // end namespace mitk diff --git a/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.h b/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.h index 92853d67fe..4866d68917 100644 --- a/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.h +++ b/Modules/OpenCVVideoSupport/mitkImageToOpenCVImageFilter.h @@ -1,108 +1,108 @@ /*=================================================================== The Medical Imaging Interaction Toolkit (MITK) Copyright (c) German Cancer Research Center, Division of Medical and Biological Informatics. All rights reserved. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See LICENSE.txt or http://www.mitk.org for details. ===================================================================*/ #ifndef mitkImageToOpenCVImageFilter_h #define mitkImageToOpenCVImageFilter_h #include #include #include #include #include #include #include "mitkImageSliceSelector.h" namespace mitk { /// /// \brief A pseudo-Filter for creating OpenCV images from MITK images with the option of copying data or referencing it /// class MITKOPENCVVIDEOSUPPORT_EXPORT ImageToOpenCVImageFilter : public itk::Object { public: typedef itk::RGBPixel< unsigned char > UCRGBPixelType; typedef itk::RGBPixel< unsigned short > USRGBPixelType; typedef itk::RGBPixel< float > FloatRGBPixelType; typedef itk::RGBPixel< double > DoubleRGBPixelType; mitkClassMacroItkParent(ImageToOpenCVImageFilter, itk::Object); itkFactorylessNewMacro(Self) itkCloneMacro(Self) /// /// \brief set the input MITK image /// void SetImage( mitk::Image* _Image ); /// /// \brief get the input MITK image /// mitk::Image* GetImage(); /// /// \brief get the input MITK image /// bool CheckImage(mitk::Image* image); /// /// RUNS the conversion and returns the produced OpenCVImage. /// !!!ATTENTION!!! Do not forget to release this image again with cvReleaseImage(). /// \return the produced OpenCVImage or 0 if an error occured! /// - IplImage* GetOpenCVImage(); + cv::Mat GetOpenCVImage(); /// /// RUNS the conversion and returns the produced image as cv::Mat. /// \return the produced OpenCVImage or an empty image if an error occured /// cv::Mat GetOpenCVMat(); //##Documentation //## @brief Convenient method to set a certain slice of a 3D or 4D mitk::Image as input to convert it to an openCV image //## //## This methods sets the input. Call GetOpenCVMat() or GetOpenCVImage() to get the image. //## //## @param mitkImage - the image that should be converted to an openCVImage //## @param timeStep - the time step, which is converted to openCV //## @param slice - the slice which is converted to openCV void SetInputFromTimeSlice(Image::Pointer mitkImage, int timeStep, int slice); protected: /// /// the actual templated conversion method /// template void ItkImageProcessing( itk::Image* image ); ImageToOpenCVImageFilter(); ~ImageToOpenCVImageFilter() override; /// /// Saves if the filter should copy the data or just reference it /// mitk::WeakPointer m_Image; - IplImage* m_OpenCVImage; + cv::Mat m_OpenCVImage; private: ImageSliceSelector::Pointer m_sliceSelector; }; } // namespace #endif // mitkImageToOpenCVImageFilter_h