2014-08-28 54 views
0

dst = signum(src)函數將src中的所有正元素的值設置爲1,將所有負元素的值設置爲-1如何在OpenCV中實現signum函數?

但是,似乎不可能通過應用OpenCV函數threshold()來實現signum()函數。我也不想穿越src,因爲它效率低下。

回答

5

我不知道你正在使用的語言,但在OpenCV的C++,符號函數可以實現如下:

Mat signum(Mat src) 
{ 
    Mat dst = (src >= 0) & 1; 
    dst.convertTo(dst,CV_32F, 2.0, -1.0); 
    return dst; 
} 

中 - 當然,返回的矩陣將有浮點或符號的類型存儲-1的值。

更新:

以前的實現僅僅1或返回根據輸入的值,但根據signum定義,0應該在輸出保持0 -1。因此從this answer得到參考,標準符號函數可以用OpenCV實現如下:

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; 
}