2014-11-10 5 views
0

Matlab에서 논리적 (img)을 사용하여 0이 아닌 모든 요소를 ​​하나로 변환 할 수 있습니다.0이 아닌 값을 1로 변환

OpenCV에서 cv :: Mat에 저장된 0이 아닌 값을 모두 변환하는 간단한 방법이 있습니까?

감사합니다.

+0

.mat 파일을 openCV로로드 하시겠습니까? –

+0

죄송합니다. 나는 cv :: Mat를 의미한다. – wking

+0

두 개의 루프로 "하드 코딩"해야한다고 생각합니다. –

답변

2

도움이 될만한 기능이 많이 있지만 그 내용은 갖고있는 내용과 얻고 자하는 내용에 따라 다릅니다.

1) OpenCV는 compare 함수와 '! ='연산자 (필요한 다른 연산자가 있음)가 있습니다. 이것은 255 당신이 1로 변환하고 싶었 알고 행렬의 0이 아닌 값을 변환합니다

img = (img != 0); 

하지만 255 당신을 위해 충분히 좋은 경우이 최선의 방법보다 : 당신은 쓸 수 있습니다. 과거에 255에서 발생했던 모든 작업에서 논리 AND, OR 등과 같은 비트 연산의 모든 종류의 결과 이미지를 사용할 수 있기 때문에 항상 1로 변환하는 것보다 낫습니다.

2) 변환을 1로 만들고 행렬이 양의 정수 (또는 문자 또는 단락) 인 경우 함수 min을 사용할 수 있습니다.

img = min(img,1); 

3) @Roger Rowland가 제안한대로 threshold 기능을 사용할 수도 있습니다.

0

편의상 OpenCV에서 threshold() 기능을 사용할 수 있습니다. "0이 아닌"요소를 언급합니다. 행렬에 음수가 있고 여전히 1로 설정하려면 threshold(abs(my_mat), ..)을 사용하십시오. 일반적으로

,이 또한이를 통해 수행 할 수 있습니다

Mat my_mat; 
Mat reference = Mat::zeros(rows, cols, type); 

Mat result = (abs(my_mat) > reference)/255; 

이 더 이상이며, 아마도 지저분 보이는, 그러나 필요한 경우 reference 모두 0이 아닌 다른 값으로 조정할 수있는 장점이있다 (그라디언트 일 수 있습니다). 또한 <이 아니고에 해당하는 연산자 만 사용할 수 있습니다. 모든 논리 연산자를 사용할 수 있습니다. 논리 연산의 결과는 항상 0 또는 255이므로 나누기가됩니다.

관련 문제