diff --git a/applications/calibration-multi/src/main.cpp b/applications/calibration-multi/src/main.cpp
index c45bb27cb552dd2fb557e7346f5cd3bbef3712ca..2af88278e0769cc8772818ea10a19145cea6f87e 100644
--- a/applications/calibration-multi/src/main.cpp
+++ b/applications/calibration-multi/src/main.cpp
@@ -12,6 +12,7 @@
 #include <opencv2/core.hpp>
 #include <opencv2/aruco.hpp>
 #include <opencv2/core/eigen.hpp>
+#include <opencv2/opencv.hpp>
 
 #include <algorithm>
 #include <numeric>
diff --git a/applications/gui/src/camera.cpp b/applications/gui/src/camera.cpp
index 40f4757e2e30b2c0b3d8c6b2b10d823bcf7e7534..25dab31d1f4face1e7927a34fcb523be269e6791 100644
--- a/applications/gui/src/camera.cpp
+++ b/applications/gui/src/camera.cpp
@@ -3,6 +3,9 @@
 #include "screen.hpp"
 #include <nanogui/glutil.h>
 
+#include <opencv2/imgproc.hpp>
+#include <opencv2/imgcodecs.hpp>
+
 #include <ftl/operators/antialiasing.hpp>
 
 #define LOGURU_REPLACE_GLOG 1
diff --git a/applications/gui/src/gltexture.hpp b/applications/gui/src/gltexture.hpp
index f83eabea27887d2b9a86259a88226698972f01e3..88bf1a18bff29634f09c902c9a56707d74a9d61d 100644
--- a/applications/gui/src/gltexture.hpp
+++ b/applications/gui/src/gltexture.hpp
@@ -1,7 +1,7 @@
 #ifndef _FTL_GUI_GLTEXTURE_HPP_
 #define _FTL_GUI_GLTEXTURE_HPP_
 
-#include <opencv2/opencv.hpp>
+#include <opencv2/core/mat.hpp>
 
 namespace ftl {
 namespace gui {
diff --git a/applications/reconstruct/src/main.cpp b/applications/reconstruct/src/main.cpp
index c7cc97fcdfb440805196936dfc45322be23ac11e..f7ea721ad024db77c05d6c49ed1a2ed679f92d25 100644
--- a/applications/reconstruct/src/main.cpp
+++ b/applications/reconstruct/src/main.cpp
@@ -28,7 +28,7 @@
 #include <thread>
 #include <chrono>
 
-#include <opencv2/opencv.hpp>
+//#include <opencv2/opencv.hpp>
 #include <ftl/net/universe.hpp>
 
 #include <ftl/operators/smoothing.hpp>
diff --git a/applications/vision/include/ftl/streamer.hpp b/applications/vision/include/ftl/streamer.hpp
index 0987633e4f679b5ea1ec998963d59a07111f1376..71010362a7a22fc804a4493d7bc8f868bf554c80 100644
--- a/applications/vision/include/ftl/streamer.hpp
+++ b/applications/vision/include/ftl/streamer.hpp
@@ -3,7 +3,7 @@
 
 #include <ftl/net/universe.hpp>
 #include <nlohmann/json.hpp>
-#include <opencv2/opencv.hpp>
+#include <opencv2/core/mat.hpp>
 #include <string>
 
 namespace ftl {
diff --git a/components/codecs/include/ftl/codecs/decoder.hpp b/components/codecs/include/ftl/codecs/decoder.hpp
index 5ebce8ed5ef5a3b234445f9be60f27258046530f..4af10e1186855da9b19be7bd8022405c8ac841bb 100644
--- a/components/codecs/include/ftl/codecs/decoder.hpp
+++ b/components/codecs/include/ftl/codecs/decoder.hpp
@@ -1,7 +1,7 @@
 #ifndef _FTL_CODECS_DECODER_HPP_
 #define _FTL_CODECS_DECODER_HPP_
 
-#include <opencv2/opencv.hpp>
+//#include <opencv2/opencv.hpp>
 #include <opencv2/core/cuda.hpp>
 #include <opencv2/core/cuda_stream_accessor.hpp>
 
diff --git a/components/codecs/include/ftl/codecs/encoder.hpp b/components/codecs/include/ftl/codecs/encoder.hpp
index 54b334a517853230fd4d0aad44b342d9662aec8f..995a8216c6c3b3dea24bce5ca5394c5698fb144a 100644
--- a/components/codecs/include/ftl/codecs/encoder.hpp
+++ b/components/codecs/include/ftl/codecs/encoder.hpp
@@ -2,7 +2,7 @@
 #define _FTL_CODECS_ENCODER_HPP_
 
 #include <ftl/cuda_util.hpp>
-#include <opencv2/opencv.hpp>
+//#include <opencv2/core/mat.hpp>
 #include <opencv2/core/cuda.hpp>
 
 #include <ftl/codecs/codecs.hpp>
diff --git a/components/codecs/src/opencv_decoder.cpp b/components/codecs/src/opencv_decoder.cpp
index e08117ae2225eed1e3871a0a94383bae05efa67b..809f716dfc33eb2c6a2f23a52fb4c896e12ef3f0 100644
--- a/components/codecs/src/opencv_decoder.cpp
+++ b/components/codecs/src/opencv_decoder.cpp
@@ -1,5 +1,7 @@
 #include <ftl/codecs/opencv_decoder.hpp>
 
+#include <opencv2/opencv.hpp>
+
 #include <loguru.hpp>
 
 using ftl::codecs::OpenCVDecoder;
diff --git a/components/codecs/src/opencv_encoder.cpp b/components/codecs/src/opencv_encoder.cpp
index 8edc1a616fd527bd748f7a7802ef7a28740ec44e..152f05754c619124b2c99a6f5876dc8016873a3b 100644
--- a/components/codecs/src/opencv_encoder.cpp
+++ b/components/codecs/src/opencv_encoder.cpp
@@ -1,5 +1,7 @@
 #include <ftl/codecs/opencv_encoder.hpp>
 
+#include <opencv2/opencv.hpp>
+
 #include <loguru.hpp>
 #include <vector>
 
diff --git a/components/codecs/test/nvpipe_codec_unit.cpp b/components/codecs/test/nvpipe_codec_unit.cpp
index 9bb72b1a7916c310d9d35b058d99d0445589f0fb..09a5b77dd2b44c2c58d16884d2ea2afab22be96b 100644
--- a/components/codecs/test/nvpipe_codec_unit.cpp
+++ b/components/codecs/test/nvpipe_codec_unit.cpp
@@ -4,6 +4,8 @@
 #include <ftl/codecs/hevc.hpp>
 #include <ftl/threads.hpp>
 
+#include <opencv2/cudaarithm.hpp>
+
 using ftl::codecs::definition_t;
 using ftl::codecs::codec_t;
 using ftl::codecs::format_t;
diff --git a/components/codecs/test/opencv_codec_unit.cpp b/components/codecs/test/opencv_codec_unit.cpp
index ec3ec10c0e47d97b65b51529f2edc3ed3baf4e0f..cf03f71a26468be628e0009d1ac2e294fc12e8d1 100644
--- a/components/codecs/test/opencv_codec_unit.cpp
+++ b/components/codecs/test/opencv_codec_unit.cpp
@@ -3,6 +3,8 @@
 #include <ftl/codecs/opencv_decoder.hpp>
 #include <ftl/threads.hpp>
 
+#include <opencv2/cudaarithm.hpp>
+
 using ftl::codecs::format_t;
 using ftl::codecs::definition_t;
 using ftl::codecs::codec_t;
diff --git a/components/operators/include/ftl/operators/disparity.hpp b/components/operators/include/ftl/operators/disparity.hpp
index f45fa244fc922417e359af7fa22653979b108059..aaa52e60e23c161f10fff90b685810924e53e024 100644
--- a/components/operators/include/ftl/operators/disparity.hpp
+++ b/components/operators/include/ftl/operators/disparity.hpp
@@ -7,6 +7,8 @@
 #include <opencv2/cudaoptflow.hpp>
 #endif
 
+#include <opencv2/cudastereo.hpp>
+
 #ifdef HAVE_LIBSGM
 #include <libsgm.h>
 #endif
diff --git a/components/operators/src/colours.cpp b/components/operators/src/colours.cpp
index 4d8939f0134eaa018f6b2b51995825b21b522d9e..9d913e6f3e2c37839cf098c776532a70d97b2b81 100644
--- a/components/operators/src/colours.cpp
+++ b/components/operators/src/colours.cpp
@@ -1,5 +1,8 @@
 #include <ftl/operators/colours.hpp>
 
+#include <opencv2/cudaimgproc.hpp>
+#include <opencv2/cudawarping.hpp>
+
 using ftl::operators::ColourChannels;
 using ftl::codecs::Channel;
 
diff --git a/components/operators/src/disparity/fixstars_sgm.cpp b/components/operators/src/disparity/fixstars_sgm.cpp
index 4d605f88a3dbd310a610332f31df217b21f46f3c..ac81a56ce8501df6c856483e0ca3ebea87b68a83 100644
--- a/components/operators/src/disparity/fixstars_sgm.cpp
+++ b/components/operators/src/disparity/fixstars_sgm.cpp
@@ -2,6 +2,9 @@
 
 #include "ftl/operators/disparity.hpp"
 
+#include <opencv2/cudaimgproc.hpp>
+#include <opencv2/cudaarithm.hpp>
+
 using cv::Size;
 using cv::cuda::GpuMat;
 
diff --git a/components/operators/src/nvopticalflow.cpp b/components/operators/src/nvopticalflow.cpp
index 08da949e00e727a3b5b76cc1fbe2fb73c3b4f210..36c0161ebf7cb45fe3a74d4c722d2cc2d4a7f2e3 100644
--- a/components/operators/src/nvopticalflow.cpp
+++ b/components/operators/src/nvopticalflow.cpp
@@ -1,5 +1,7 @@
 #include <ftl/operators/opticalflow.hpp>
 
+#include <opencv2/cudaimgproc.hpp>
+
 using ftl::rgbd::Frame;
 using ftl::rgbd::Source;
 using ftl::codecs::Channel;
diff --git a/components/operators/src/smoothing.cpp b/components/operators/src/smoothing.cpp
index 3f68620727550ef00b637a49963d8c3a51043a47..94eda17700e80a760b2aa8a11e021b4bcd59d073 100644
--- a/components/operators/src/smoothing.cpp
+++ b/components/operators/src/smoothing.cpp
@@ -6,6 +6,8 @@
 
 #include <ftl/cuda/normals.hpp>
 
+#include <opencv2/cudawarping.hpp>
+
 using ftl::operators::HFSmoother;
 using ftl::operators::SimpleMLS;
 using ftl::operators::ColourMLS;
diff --git a/components/renderers/cpp/src/tri_render.cpp b/components/renderers/cpp/src/tri_render.cpp
index cb858313c249da53d55ea7693243151e08bdc58f..235481a50f1cf77a91c20a517ab6cc39d658c466 100644
--- a/components/renderers/cpp/src/tri_render.cpp
+++ b/components/renderers/cpp/src/tri_render.cpp
@@ -8,6 +8,8 @@
 #define LOGURU_REPLACE_GLOG 1
 #include <loguru.hpp>
 
+#include <opencv2/imgcodecs.hpp>
+#include <opencv2/imgproc.hpp>
 #include <opencv2/core/cuda_stream_accessor.hpp>
 
 //#include <ftl/filters/smoothing.hpp>
diff --git a/components/rgbd-sources/CMakeLists.txt b/components/rgbd-sources/CMakeLists.txt
index 4001d5c1cb27c581e90cd2539ea7f5f77cfe7a01..bc983d1f23297e938d880a3eca51f55ad3673729 100644
--- a/components/rgbd-sources/CMakeLists.txt
+++ b/components/rgbd-sources/CMakeLists.txt
@@ -7,7 +7,7 @@ set(RGBDSRC
 	src/sources/stereovideo/stereovideo.cpp
 	#src/sources/net/net.cpp
 	#src/streamer.cpp
-	src/colour.cpp
+	#src/colour.cpp
 	src/group.cpp
 	src/cb_segmentation.cpp
 	#src/abr.cpp
diff --git a/components/rgbd-sources/include/ftl/rgbd/detail/source.hpp b/components/rgbd-sources/include/ftl/rgbd/detail/source.hpp
index bb162c925586d177ed37465a778555254000d631..a5949ff51683199e40104e943b195d02323b3277 100644
--- a/components/rgbd-sources/include/ftl/rgbd/detail/source.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/detail/source.hpp
@@ -3,7 +3,7 @@
 
 #include <Eigen/Eigen>
 #include <ftl/cuda_util.hpp>
-#include <opencv2/opencv.hpp>
+//#include <opencv2/opencv.hpp>
 #include <ftl/rgbd/camera.hpp>
 #include <ftl/rgbd/frame.hpp>
 
diff --git a/components/rgbd-sources/include/ftl/rgbd/frameset.hpp b/components/rgbd-sources/include/ftl/rgbd/frameset.hpp
index e23a42d691414fee9096aabe07ec71442b8f3aab..7fbb09b51b60fe54bdbf25954f062d2f66dae02e 100644
--- a/components/rgbd-sources/include/ftl/rgbd/frameset.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/frameset.hpp
@@ -5,7 +5,7 @@
 #include <ftl/timer.hpp>
 #include <ftl/rgbd/frame.hpp>
 
-#include <opencv2/opencv.hpp>
+//#include <opencv2/core.hpp>
 #include <vector>
 
 namespace ftl {
diff --git a/components/rgbd-sources/include/ftl/rgbd/group.hpp b/components/rgbd-sources/include/ftl/rgbd/group.hpp
index 438d11febc632642592c45b5974cb5a339c5b0df..b339511a219abf0f7bff3f76461b6e8c1cf07fd5 100644
--- a/components/rgbd-sources/include/ftl/rgbd/group.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/group.hpp
@@ -8,7 +8,7 @@
 #include <ftl/rgbd/frameset.hpp>
 #include <ftl/codecs/packet.hpp>
 
-#include <opencv2/opencv.hpp>
+//#include <opencv2/opencv.hpp>
 #include <vector>
 
 namespace ftl {
diff --git a/components/rgbd-sources/include/ftl/rgbd/snapshot.hpp b/components/rgbd-sources/include/ftl/rgbd/snapshot.hpp
index f9bb39756362c344877df441a445a07f3e5eab37..8e1fa5960b6f00ceeccd163f5e0433f4afca5ab6 100644
--- a/components/rgbd-sources/include/ftl/rgbd/snapshot.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/snapshot.hpp
@@ -5,7 +5,7 @@
 #include <loguru.hpp>
 #include <thread>
 
-#include <opencv2/opencv.hpp>
+#include <opencv2/core/mat.hpp>
 
 #include <Eigen/Eigen>
 #include <opencv2/core/eigen.hpp>
diff --git a/components/rgbd-sources/include/ftl/rgbd/source.hpp b/components/rgbd-sources/include/ftl/rgbd/source.hpp
index d26d8942a36ad2340305918a133a47be0c5b856a..41d9e88b0a811ae487a308cbf15668da2734498f 100644
--- a/components/rgbd-sources/include/ftl/rgbd/source.hpp
+++ b/components/rgbd-sources/include/ftl/rgbd/source.hpp
@@ -9,7 +9,7 @@
 #include <ftl/rgbd/camera.hpp>
 #include <ftl/rgbd/detail/source.hpp>
 #include <ftl/codecs/packet.hpp>
-#include <opencv2/opencv.hpp>
+#include <opencv2/core/mat.hpp>
 #include <Eigen/Eigen>
 #include <string>
 #include <map>
diff --git a/components/rgbd-sources/src/colour.hpp b/components/rgbd-sources/src/colour.hpp
index be88853a51c894ded68374de2e7dd128b76ed657..9c7c44aff328fb19b8ddfd04c1857819fbaea21b 100644
--- a/components/rgbd-sources/src/colour.hpp
+++ b/components/rgbd-sources/src/colour.hpp
@@ -1,7 +1,7 @@
 #ifndef _FTL_RGBD_COLOUR_HPP_
 #define _FTL_RGBD_COLOUR_HPP_
 
-#include <opencv2/opencv.hpp>
+#include <opencv2/core/mat.hpp>
 
 namespace ftl {
 namespace rgbd {
diff --git a/components/rgbd-sources/src/disparity.hpp b/components/rgbd-sources/src/disparity.hpp
index 6802869c1c727a60f5ae3b308c86390486404044..bcb1fec09a91b6522492a8ae2c13219d7a93bd11 100644
--- a/components/rgbd-sources/src/disparity.hpp
+++ b/components/rgbd-sources/src/disparity.hpp
@@ -5,7 +5,7 @@
 #ifndef _FTL_DISPARITY_HPP_
 #define _FTL_DISPARITY_HPP_
 
-#include <opencv2/opencv.hpp>
+#include <opencv2/core.hpp>
 #include <nlohmann/json.hpp>
 #include <ftl/configurable.hpp>
 #include <ftl/rgbd/frame.hpp>
diff --git a/components/streams/src/receiver.cpp b/components/streams/src/receiver.cpp
index 26d9c794746b5a2fee14014b7c5ef2ef129fa536..bccd8ce4f517fc23c43e425521ff1ef7b83725d1 100644
--- a/components/streams/src/receiver.cpp
+++ b/components/streams/src/receiver.cpp
@@ -1,6 +1,8 @@
 #include <ftl/streams/receiver.hpp>
 #include <ftl/codecs/depth_convert_cuda.hpp>
 
+#include <opencv2/cudaimgproc.hpp>
+
 #include "parsers.hpp"
 #include "injectors.hpp"
 
diff --git a/components/streams/src/sender.cpp b/components/streams/src/sender.cpp
index e1aa69b58f9ec0d2d2187e76f2107848e757281e..11ababc855ca840ffcc1d5cd6f3a94eb26b10f7b 100644
--- a/components/streams/src/sender.cpp
+++ b/components/streams/src/sender.cpp
@@ -1,6 +1,8 @@
 #include <ftl/streams/sender.hpp>
 #include <ftl/codecs/depth_convert_cuda.hpp>
 
+#include <opencv2/cudaimgproc.hpp>
+
 #include "injectors.hpp"
 
 #define LOGURU_REPLACE_GLOG 1