我使用Eigen来计算unsigned char
类型的两个矩阵之间的差异。
Eigen::Matrix<unsigned char, 4, 1> C0;
Eigen::Matrix<unsigned char, 4, 1> C1;
C0 << 255, 0, 127, 1;
C1 << 0, 255, 128, 255;
std::cout << (C0 - C1).cast<int>() << "\n";
结果为255 1 255 2
。我希望操作在下溢的情况下饱和(如果是添加则溢出),导致255 0 0 0
。这可能与Eigen有关吗?
答案 0 :(得分:2)
Eigen内部没有任何内容可供使用。您可能会provide a custom type重载operator+
,operator-
等,就像您想要的那样。
当然,理想情况下,这应该使用饱和SIMD指令(例如,_mm_subs_epi8
如果你有SSE2)在内部,但这并不是很容易集成到Eigen中 - 特别是如果你的矩阵大小不是16的倍数字节。