diff --git a/Modules/Video/BridgeOpenCV/include/itkOpenCVVideoCapture.hxx b/Modules/Video/BridgeOpenCV/include/itkOpenCVVideoCapture.hxx index 539f09b62d2..beff5af2459 100644 --- a/Modules/Video/BridgeOpenCV/include/itkOpenCVVideoCapture.hxx +++ b/Modules/Video/BridgeOpenCV/include/itkOpenCVVideoCapture.hxx @@ -23,10 +23,13 @@ #include "itkImageRegionConstIteratorWithIndex.h" #include "opencv2/core/version.hpp" -#if !defined(CV_VERSION_EPOCH) -// OpenCV 3.x +#if !defined(CV_VERSION_EPOCH) // OpenCV >= 3.0 # include "opencv2/videoio.hpp" # include "opencv2/imgproc/types_c.h" // CV_RGB2BGR, CV_BGR2GRAY, ... +# include "opencv2/imgproc/imgproc_c.h" +# if CV_VERSION_MAJOR > 3 // OpenCV 4.x +# include "opencv2/videoio/legacy/constants_c.h" +# endif #else // OpenCV 2.4.x # include "cv.h" diff --git a/Modules/Video/BridgeOpenCV/test/CMakeLists.txt b/Modules/Video/BridgeOpenCV/test/CMakeLists.txt index d32db436a8e..d54c9ebcc54 100644 --- a/Modules/Video/BridgeOpenCV/test/CMakeLists.txt +++ b/Modules/Video/BridgeOpenCV/test/CMakeLists.txt @@ -12,7 +12,9 @@ include_directories(${ITKVideoBridgeOpenCV_INCLUDE_DIRS}) CreateTestDriver(ITKVideoBridgeOpenCV "${ITKVideoBridgeOpenCV-Test_LIBRARIES};${OpenCV_LIBS}" - "${ITKVideoBridgeOpenCVTests}") + "${ITKVideoBridgeOpenCVTests}" + itkOpenCVTestHelper.cxx + ) # OpenCVVideoCapture: itk_add_test(NAME diff --git a/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeGrayScaleTest.cxx b/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeGrayScaleTest.cxx index 302d9babd68..6d2de627336 100644 --- a/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeGrayScaleTest.cxx +++ b/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeGrayScaleTest.cxx @@ -23,6 +23,7 @@ #include "itkTestingComparisonImageFilter.h" #include "itkImageRegionConstIteratorWithIndex.h" #include "itkOpenCVVideoIOFactory.h" +#include "itkOpenCVTestHelper.h" #if defined(CV_VERSION_EPOCH) // OpenCV 2.4.x # include "highgui.h" diff --git a/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeRGBTest.cxx b/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeRGBTest.cxx index 941b186bb8a..cb9241f069d 100644 --- a/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeRGBTest.cxx +++ b/Modules/Video/BridgeOpenCV/test/itkOpenCVImageBridgeRGBTest.cxx @@ -22,6 +22,7 @@ #include "itkImageFileReader.h" #include "itkImageRegionConstIteratorWithIndex.h" #include "itkOpenCVVideoIOFactory.h" +#include "itkOpenCVTestHelper.h" #if defined(CV_VERSION_EPOCH) // OpenCV 2.4.x # include "highgui.h" diff --git a/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.cxx b/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.cxx new file mode 100644 index 00000000000..9e69725432f --- /dev/null +++ b/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.cxx @@ -0,0 +1,47 @@ +/*========================================================================= + * + * Copyright Insight Software Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *=========================================================================*/ +#include "itkOpenCVTestHelper.h" + +#include + +#include "opencv2/core/version.hpp" +#include "opencv2/imgcodecs.hpp" // cv::imread + +#if CV_VERSION_MAJOR > 3 // OpenCV >= 4.0 +# include "opencv2/imgcodecs/legacy/constants_c.h" +# include +#else // OpenCV < 4.0 +# include "opencv2/imgcodecs/imgcodecs_c.h" // CV_LOAD_IMAGE_COLOR +#endif + +#if CV_VERSION_MAJOR > 3 +// Based on https://stackoverflow.com/a/13683381/471839 +IplImage * +cvLoadImage(const char * filename, int iscolor) +{ + std::map matDepthToIplDepth{ { CV_8U, IPL_DEPTH_8U }, { CV_8S, IPL_DEPTH_8S }, + { CV_16U, IPL_DEPTH_16U }, { CV_16S, IPL_DEPTH_16S }, + { CV_32S, IPL_DEPTH_32S }, { CV_32F, IPL_DEPTH_32F }, + { CV_64F, IPL_DEPTH_64F } }; + cv::Mat mat = cv::imread(filename, iscolor); + IplImage * ipl = cvCreateImage(cvSize(mat.cols, mat.rows), matDepthToIplDepth[mat.depth()], mat.channels()); + IplImage iplTemp = mat; + cvCopy(&iplTemp, ipl); + return ipl; +} +#endif diff --git a/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.h b/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.h new file mode 100644 index 00000000000..204e51792e9 --- /dev/null +++ b/Modules/Video/BridgeOpenCV/test/itkOpenCVTestHelper.h @@ -0,0 +1,31 @@ +/*========================================================================= + * + * Copyright Insight Software Consortium + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0.txt + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + *=========================================================================*/ +#ifndef itkOpenCVTestHelper_h +#define itkOpenCVTestHelper_h + +#include +#include + +#if CV_VERSION_MAJOR > 3 +// This is a shim to support tests that depend on loading IplImages via the +// obsolete C API that was dropped in OpenCV 4. +IplImage * +cvLoadImage(const char * filename, int iscolor); +#endif + +#endif // itkOpenCVTestHelper_h