EmguCV项目首次调用CUDA时出现“OpenCV: invalid device function”错误
以下是针对你的.NET Framework WinForms项目场景的具体解决步骤:
确保所有EmguCV包版本完全一致
检查NuGet中安装的Emgu.CV、Emgu.CV.Bitmap、Emgu.CV.runtime.windows.cuda三个包的版本号必须完全相同,版本不一致会导致CUDA runtime与核心库不兼容,触发设备函数无效的错误。验证显卡算力与EmguCV的CUDA runtime版本匹配
NVIDIA GeForce GTX 750 Ti的算力版本是5.0,需要确认你安装的Emgu.CV.runtime.windows.cuda包对应的CUDA版本支持该算力。部分较新的CUDA runtime(如CUDA 12及以上)已不再支持算力5.0的显卡,建议降级到支持该算力的版本(比如对应CUDA 11.x的EmguCV包版本)。提前初始化CUDA设备
在调用任何CUDA函数前,手动指定要使用的设备,添加代码:CudaInvoke.SetDevice(0);确保设备被正确激活,避免因设备上下文未初始化导致的函数调用失败。
检查输入参数与图像格式
确认cudaImage是有效的CUDA Mat类型,且图像深度、通道数符合BilateralFilter的要求:该函数仅支持8位单通道或3通道图像。同时检查参数值是否合理,d=150属于较大的滤波直径,可先尝试减小数值(如d=10)测试是否仍抛出异常,排除参数不合理导致的问题。更新或匹配CUDA驱动版本
确保你的NVIDIA显卡驱动版本不低于当前EmguCV所依赖CUDA版本的最低要求。比如若使用CUDA 11.8,驱动版本需至少为450.80.02;若使用CUDA 10.2,驱动需至少为440.33。
内容的提问来源于stack exchange,提问作者ddddd

