C++ 将opencv::Vec3b转换为特征矩阵<;无符号字符,3,1>;

C++ 将opencv::Vec3b转换为特征矩阵<;无符号字符,3,1>;,c++,opencv,eigen,C++,Opencv,Eigen,我有以下资料: typedef Eigen::Matrix <unsigned char, 3, 1> Vec3b_eigen; 我也像这样使用了cv2eigen() cv::Vec3b bgr_cv = image.at<Vec3b>(y, x); Vec3b_eigen rgb_eigen; cv::cv2eigen(bgr_cv,rgb_eigen); cv::Vec3b bgr_cv=image.at(y,x); Vec3b_本征rgb_本征; cv::cv2

我有以下资料:

typedef Eigen::Matrix <unsigned char, 3, 1> Vec3b_eigen;
我也像这样使用了
cv2eigen()

cv::Vec3b bgr_cv = image.at<Vec3b>(y, x);
Vec3b_eigen rgb_eigen;
cv::cv2eigen(bgr_cv,rgb_eigen);
cv::Vec3b bgr_cv=image.at(y,x);
Vec3b_本征rgb_本征;
cv::cv2eigen(bgr_-cv,rgb_-eigen);

但它也不起作用。

它是bgr_cv[指数0..2]。。。你尝试了错误的括号。哦,对不起,我在这里键入的是错误的,但在我的代码中,我实际上有正确的括号Vec3b_eigen rgb_eigen={bgr_cv[2],bgr_cv[1],bgr_cv[1]};代码编译并运行,但当我使用std::cout
unsigned char
打印rgb_eigen的值时,它们是字符。在打印过程中,将它们输入到
int
或某物,将它们显示为数字。您是否有意将
bgr\u cv的索引1取两次?在@Mika的评论中添加:铸造一个特征类型可以这样做:
std::cout非常感谢你们两位。。我为此挣扎了好几个小时。。现在它像一个符咒一样工作:)PS:@chtz我不小心拿了bgr_cv[1]两次。谢谢你的评论。。
Vec3b_eigen rgb_eigen = {bgr_cv(2), bgr_cv(1), bgr_cv(1)};
cv::Vec3b bgr_cv = image.at<Vec3b>(y, x);
Vec3b_eigen rgb_eigen;
cv::cv2eigen(bgr_cv,rgb_eigen);