2010-05-23 8 views
1

opencv 2.0 cv::Mat 클래스를 사용하여 스칼라 값을 더하거나 빼는 가장 쉬운 방법을 찾으려고합니다.OpenCV 곱하기 스칼라와 행렬

기존 함수의 대부분은 행렬 - 행렬 및 행렬 - 스칼라 연산 만 허용합니다.

스칼라 매트릭스 연산을 찾고 있습니다.

저는 현재 스칼라 값이 같고 필요한 산술 연산을 수행하는 임시 매트릭스를 작성하여 처리하고 있습니다. 예 아래 ..

Mat M(Size(100,100), CV_8U); 
Mat temp = Mat::ones(100, 100, CV_8U)*255; 
M = temp-M; 

그러나 나는 그것을 더 나은/쉬운 방법이 있어야한다고 생각합니다.

제안 사항?

답변

5

int 또는 double에서 매트 식을 초기화 할 수 없습니다. 이 솔루션은 심지어 단일 채널 행렬을 위해, 이력서 :: 스칼라를 사용하는 것입니다

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를 참조하십시오.

+0

자바에서 어떻게해야합니까? –

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에서 위의 내용을 시도하면 어떻게됩니까?