I was wondering why, while most headers are in include/opencv2/<module>/ or include/opencv2/<module>/<hal|utils|detail>, cuda and opencl headers are expected to be in src/cuda and src/opencl respectively. Furthermore both the .cu sources and the .hpp headers for cuda are expected to be in src/cuda, which doesn't necessarily seem like a very good directory structure.
Additionally some of the headers that are cuda related may need to be included by projects using the module, but with those headers being in src/cuda rather than include/opencv2/module/cuda, one would need to add that path explicitly to be able to include those headers (unless I am missing something and src/cuda headers are being added somehow.