我试图找到最简单的添加方法,用opencv 2.0 cv::Mat
类减去标量值。
大多数现有函数只允许矩阵 - 矩阵和矩阵 - 标量运算。
我正在寻找一个标量矩阵运算。
我目前正在通过创建具有相同标量值的临时矩阵并执行所需的算术运算来完成此操作。以下示例..
Mat M(Size(100,100), CV_8U);
Mat temp = Mat::ones(100, 100, CV_8U)*255;
M = temp-M;
但我认为应该有更好/更简单的方法来做到这一点。
有什么建议吗?
答案 0 :(得分:5)
您无法从int或double初始化Mat表达式。解决方案是使用cv :: Scalar,即使对于单通道矩阵:
Mat M = Mat::ones(Size(100, 100), CV_8U);
M = Scalar::all(255) - M;
请参阅http://docs.opencv.org/modules/core/doc/basic_structures.html#matrixexpressions以获取可能的Mat表达式列表。
答案 1 :(得分:0)
也许这是2.1或2.1和当前主干版本之间的某个功能,但这对我来说很好用:
Mat cc = channels[k];
double fmin,fmax;
cv::minMaxLoc( cc, &fmin, &fmax );
if( fmax > 1.0 )
fmax = 255.0 ;
else
fmax = 1.0;
cc = ( cc / (fmax + 1e-9) );
频道来自:
channels = vector<Mat>(3);
cv::split( img, channels );
所以,确保只使用标量表达式,至少在2.1 /当前SVN分支中;如果你在2.0中尝试上述内容会发生什么?