你在调用 cv::remap 时遇到了这个未处理异常:

❌ Microsoft C++ 异常: cv::Exception,位于内存位置…

这表示 OpenCV 的 remap() 函数抛出了错误,最常见原因如下


✅ 最常见 remap 报错原因 + 修复方案

原因 说明 解决方案
map_x / map_y 类型错误 类型必须是 CV_32FC1(单通道 float)或 CV_64FC1 map_x.convertTo(map_x_32f, CV_32F)
map_x / map_y 尺寸与原图不同 map_x.size() 必须与 src.size() 一致 使用 resize() 或生成匹配尺寸的网格
输入图像为空 cv::remap() 会直接崩溃 在调用前加 if (img.empty()) return;
OpenCV 没链接完全(如未链接 imgproc) Rare,但 VS 项目未正确链接模块可能导致 确保链接 OpenCV 的 imgproc, core, highgui 等模块


✅ 建议加上 try-catch 输出 OpenCV 错误信息:

try { cv::remap(src, dst, map_x, map_y, cv::INTER_LINEAR, cv::BORDER_CONSTANT, cv::Scalar(0)); } catch (const cv::Exception& e) { std::cerr << "OpenCV remap error: " << e.what() << std::endl; }

OpenCV remap error: OpenCV(4.9.0) error: (-215:Assertion failed) ((map1.type() == CV_32FC1 || map1.type() == CV_64FC1) && ...) in function 'remap'


 


cpp

复制编辑

map_x.convertTo(map_x, CV_32F); map_y.convertTo(map_y, CV_32F);

或者你创建时就用 CV_32F

cv::Mat map_x(H, W, CV_32FC1); // not CV_64F or CV_8U


 

if (src.empty()) { std::cerr << "Input image is empty!\n"; return; } if (map_x.size() != src.size() || map_x.type() != CV_32FC1) { std::cerr << "map_x type or size is invalid\n"; return; } if (map_y.size() != src.size() || map_y.type() != CV_32FC1) { std::cerr << "map_y type or size is invalid\n"; return; }

Logo

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。

更多推荐