dst = signum(src)
函数将src
中所有正元素的值设置为1
,将所有负元素的值设置为-1
。
但是,似乎无法通过应用OpenCV函数signum()
来实现threshold()
函数。我也不想遍历src
,因为它效率低下。
答案 0 :(得分:5)
我不知道您使用的是哪种语言,但在OpenCV C ++中,signum函数可以实现如下:
Mat signum(Mat src)
{
Mat dst = (src >= 0) & 1;
dst.convertTo(dst,CV_32F, 2.0, -1.0);
return dst;
}
当然,返回的矩阵将具有浮点或有符号类型以存储值-1。
前一个实现仅返回1或-1,具体取决于输入值,但根据signum定义,0应在输出中保持为0。因此,从this answer获取引用,可以使用OpenCV实现标准signum函数:
Mat signum(Mat src)
{
Mat z = Mat::zeros(src.size(), src.type());
Mat a = (z < src) & 1;
Mat b = (src < z) & 1;
Mat dst;
addWeighted(a,1.0,b,-1.0,0.0,dst, CV_32F);
return dst;
}