Documentation/Nightly/Extensions/SlicerOpenCV
For the latest Slicer documentation, visit the read-the-docs. |
Introduction and Acknowledgements
Extension: SlicerOpenCV | |||||||
|
Extension Description
This extension provides a way for a Slicer extension developer to build against the OpenCV package, by depending on the SlicerOpenCV extension. OpenCV (Open Source Computer Vision Library) is an open source computer vision and machine learning software library.
Use Cases
- If an extension developer needs the algorithms provided by OpenCV, they can add a module dependency on SlicerOpenCV and obtain a Slicer-style library to link against and use.
- SlicerOpenCV also provides a python wrapped OpenCV library that can be used in scripted modules.
Tutorials
- A Python scripted module is provided in the SlicerOpenCV extension to provide an example on how to use OpenCV from within scripted modules in Slicer:
- SlicerOpenCVSelfTest.py (note: this self test will run from inside the Slicer GUI when Developer Mode has been enabled, but it currently won't run as a ctest command line test)
Panels and their use
The OpenCV module doesn't provide a GUI, it's intended to be used at the library level by other modules.
Similar Extensions
- The OpenCVExample extension depends on this module and provides a template for linking and using OpenCV.
- The Slicer Pathology extension uses the SlicerOpenCV extension
References
Information for Developers
Section under construction. |
While configuring your project that depends on a built version of SlicerOpenCV, you need to set SlicerOpenCV_DIR to point to SlicerOpenCV_BUILD_DIR/inner-build - this is the location of SlicerOpenCVConfig.cmake
Include the SlicerOpenCV extension by calling find_package(SlicerOpenCV REQUIRED). This will set OpenCV_DIR in the scope of your extension.
This extension also provides the ITK module Video Bridge OpenCV Video Processing Using OpenCV Bridge
C++
Once the library is available, in C++ you can include header files and use the video IO factory through ITK to read from file:
itk::VideoIOBase::Pointer ioReadFile = itk::VideoIOFactory::CreateVideoIO( itk::VideoIOFactory::ReadFileMode, input); if (!ioReadFile) { std::cerr << "Did not create valid VideoIO for reading from file " << std::endl; return; }
You can also use the OpenCV library directly to access an attached camera:
itk::SizeValueType cameraNumber = 0; CvCapture* cameraCapture = cvCaptureFromCAM( cameraNumber ); if (cameraCapture == ITK_NULLPTR) { std::cerr << "Unable to create a camera to capture from" << std::endl; return; } }
Python
SlicerOpenCV also provides the python wrapped OpenCV library. It's bundled in the extension in the lib/Slicer-X.Y directory. A Python scripted self test was added to the SlicerOpenCV module, Python tests, to provide an example of how to use the python module:
import cv2
Note: there's some work to be done on Slicer's Python infrastructure to ensure that this always works in installed extensions with third party libraries (PYTHONPATH needs to be set correctly). A work around as illustrated as a case in the SlicerOpenCVSelfTest script is to use an explicit path to the wrapped library, cv2File, adn load it directly:
cv2 = imp.load_dynamic('cv2', cv2File)