OpenCV 4.5.3图像矩阵转Eigen 3.4矩阵触发报错如何解决?
报错原因
你遇到的断言报错channels() == CV_MAT_CN(dtype)是因为OpenCV输入矩阵和目标Eigen矩阵的通道数不匹配。
你加载的图像为CV_8UC3类型,是3通道的8位无符号字符矩阵,但你定义的Eigen::Matrix<uchar, Eigen::Dynamic, Eigen::Dynamic>是单通道二维矩阵,每个位置只能存储单个数值,无法匹配3通道的OpenCV矩阵结构,因此转换过程触发报错。
解决方案
你可以根据需求选择以下两种处理方式:
- 方案1:转换为单通道灰度图后再转Eigen矩阵
如果不需要保留彩色通道信息,可先将3通道图像转为单通道灰度图再执行转换:// 引入图像处理头文件 #include <opencv2/imgproc.hpp> // 加载图像后新增转灰度逻辑 cv::Mat gray_mat; cv::cvtColor(image_matrix, gray_mat, cv::COLOR_BGR2GRAY); // 用灰度图做转换 cv::cv2eigen(gray_mat, eigen_matrix); - 方案2:拆分通道分别转换
如果需要保留三个通道的原始数据,可先拆分OpenCV矩阵的通道,再分别转换为对应的Eigen矩阵:// 拆分3通道为三个单通道矩阵 std::vector<cv::Mat> bgr_channels; cv::split(image_matrix, bgr_channels); // 分别定义三个Eigen矩阵存储对应通道 Eigen::Matrix<uchar, Eigen::Dynamic, Eigen::Dynamic> b_mat, g_mat, r_mat; cv::cv2eigen(bgr_channels[0], b_mat); cv::cv2eigen(bgr_channels[1], g_mat); cv::cv2eigen(bgr_channels[2], r_mat);
内容的提问来源于stack exchange,提问作者Nummer_42O
相关产品推荐
相关产品推荐

