2013-06-05 2 views
2

이전 Opencv의 코드를 C++ 버전으로 변환했는데 행렬 곱셈에서 오류가 발생합니다. 웹에 다른 "단계"로 인해 OpenCV 오류가 발생했습니다

OpenCV Error: Sizes of input arguments do not match (The operation is neither 
'array op array' (where arrays have the same size and the same number of channels), 
nor 'array op scalar', nor 'scalar op array') 

이 오류는 채널의 다른 수를 갖는 관련이있는 것으로 보인다 - 나의 모든 그래도 난 다른 발견 했는가 1.

"단계"입니다입니다 - 하나에 24이면 32가됩니다.

이 단계는 어디에 있습니까?

나는

cv::Mat YYY(3, 4, CV_64FC1); // step 32 
cv::Mat XXX(3, 3, CV_64FC1); // step 24 

그러나 서로 다른 단계를 갖고있는 것 같다 사용하여 두 입력 행렬을 만들어?

이 오류의 원인이 cv::multiply(XXX,YYY, DDD); 일 수 있습니까?

다른 유형간에 조작 (마스크와 같은)을 수행 할 수 있습니까?

요소 현명한 두 행렬의 곱셈 당신에게

+0

오류를 제공하는 코드를 게시 할 수 있습니까? 단어로 설명하려고 시도하는 것보다 보통 더 명확합니다. – Aurelius

+0

방금 ​​편집했습니다 - cv :: multiply에 오류가 발생했습니다. – Thalia

답변

2

cv::multiply() 수행을 감사드립니다. 오류가 나타나기 때문에 행렬의 크기가 동일하지 않습니다.

* 연산자를 통해 행렬 곱셈을 할 수 있습니다. 따라서

cv::Mat DDD = XXX * YYY; 

올바르게 컴파일되고 실행됩니다. 기록을 위해

이는 아무 상관이 (직접) 귀하의 매트릭스 타입 CV_64FC1의 때문에 당신의 행렬에 대한 열 수 시간 sizeof(double)이있는 step 필드와는합니다. 행렬이 연속적이지 않으면 상황이 더 복잡해 지지만 그럴 수는 없습니다.

+0

감사합니다. 훌륭한 결과를 보았습니다. cvMultiply가 cv :: multiply로 대체 될 것 같았습니다. C++ 버전이 훨씬 똑똑해 보입니다 .-) – Thalia

+1

내가 도울 수있어서 기뻐! 이미 찾지 못했다면 [documentation] (http://docs.opencv.org/index.html)은 C++ API를 읽을 수있는 좋은 장소입니다. 때로는 오작동 기능을 빠르게 검색하면 필요한 것을 정확하게 얻을 수 있습니다! – Aurelius

관련 문제