Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "mitkImageToOpenCVImageFilter.h"
00019 #include "mitkOpenCVToMitkImageFilter.h"
00020 #include <mitkTestingMacros.h>
00021 #include <mitkITKImageImport.h>
00022 #include <iostream>
00023
00024
00025
00026
00030 int mitkImageToOpenCVImageFilterTest(int , char* [])
00031 {
00032 MITK_TEST_BEGIN("ImageToOpenCVImageFilter")
00033
00034
00035 typedef unsigned char PixelType;
00036 typedef itk::Image< itk::RGBPixel<PixelType>, 2 > ImageType;
00037 ImageType::Pointer itkImage = ImageType::New();
00038
00039 ImageType::IndexType start;
00040 start[0] = 0;
00041 start[1] = 0;
00042 ImageType::SizeType size;
00043 size[0] = 50;
00044 size[1] = 40;
00045 ImageType::RegionType region;
00046 region.SetSize( size );
00047 region.SetIndex( start );
00048 itkImage->SetRegions( region );
00049 itkImage->Allocate();
00050
00051 typedef itk::ImageRegionIterator<ImageType> IteratorType;
00052 IteratorType it(itkImage, region);
00053 float twoThirdsTheWidth = size[0] / 4;
00054 unsigned int x=0, y=0;
00055
00056 for ( it.GoToBegin(); !it.IsAtEnd(); ++it )
00057 {
00058 ImageType::PixelType newPixel;
00059 newPixel.SetRed(0);
00060 newPixel.SetGreen(0);
00061
00062 if( x > twoThirdsTheWidth )
00063 newPixel.SetBlue(0);
00064 else
00065 newPixel.SetBlue(255);
00066 it.Set(newPixel);
00067
00068 ++x;
00069
00070 if( x == size[0] )
00071 x = 0;
00072 }
00073
00074
00075
00076
00077
00078
00079
00080
00081 mitk::Image::Pointer mitkImage = mitk::ImportItkImage( itkImage );
00082
00083 mitk::ImageToOpenCVImageFilter::Pointer _ImageToOpenCVImageFilter =
00084 mitk::ImageToOpenCVImageFilter::New();
00085
00086 _ImageToOpenCVImageFilter->SetImage( mitkImage.GetPointer() );
00087
00088 IplImage* openCVImage = _ImageToOpenCVImageFilter->GetOpenCVImage();
00089
00090
00091 const unsigned int expectedSize = size[0] * size[1] * 3 * sizeof( PixelType );
00092 const unsigned int realSize = openCVImage->width * openCVImage->height * openCVImage->nChannels * sizeof ( PixelType );
00093 MITK_TEST_CONDITION_REQUIRED( expectedSize == realSize, "Test expectedSize == realSize");
00094
00095
00096 PixelType expectedBlueValue;
00097 CvScalar s;
00098 for (y = 0; (int)y < openCVImage->height; ++y)
00099 {
00100 for (x = 0; (int)x < openCVImage->width; ++x)
00101 {
00102 expectedBlueValue = 255;
00103 if(x > twoThirdsTheWidth)
00104 expectedBlueValue = 0;
00105
00106 s = cvGet2D(openCVImage,y,x);
00107 if( s.val[0] != expectedBlueValue || s.val[1] != 0 || s.val[2] != 0 )
00108 {
00109 std::cout << "Wrong RGB values in created OpenCV image" << std::endl;
00110 throw mitk::TestFailedException();
00111 }
00112 }
00113 }
00114
00115
00116
00117
00118
00119
00120 MITK_TEST_END();
00121
00122 }
00123
00124