2014-08-28 2 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 또는 -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; 
} 
관련 문제