2012-08-13 2 views
0

하나의 행렬이 "srcMat"로 700x1 크기입니다. 이다행렬이 모두 0입니다. 루프를 외주 크기로 만듭니다.

cv::Mat dstMat (srcMat.rows, srcMat.cols, srcMat.type()); 

for (int i = 0; i < medianMat.cols ; i ++) 
{ 
    dstMat(cv::Range::all(), cv::Range(i*5+1, i*5+4)).setTo(srcMat.at<int>(i)); 
} 

그러나 문제는 여기 : dstMat가 모두 0 외부 (후) 루프 "에 대한"하지만 루프 내부, 그것은 가지고있다 나는 빈 매트릭스 "dstMat"에 값을 제공하기 위해 다음 명령을 사용 내가 원하는 바로 그 가치. 여기에 어떤 문제가 있습니까? 미리 감사드립니다.

+0

dstMat, medianMat 및 크기와 값에 대한 자세한 내용을 제공하여 블록을 실행하고 테스트를 수행 할 수 있습니까? – G453

답변

0

나는 문제는 범위를 선택하려고 할 때마다 읽기 전용 값으로 작업한다는 것입니다. 그래서 모든 값을 잃어 버리고 있으며, 그 중 어느 것도 실제 행렬에 도달하지 못합니다.

매트 매트 :: 연산자() (범위 rowRange : 반환 된 값을 사용하여 매트릭스를 편집 할 수 있도록이 OpenCV의 문서에 기록되면

operator()에서 반환 된 값은 const입니다 범위 colRange) CONST 그러나

, 당신은 setTo의 2 마스크 인수를 사용하는 경우에는 아무 문제가 없어야한다 :

매트 & 매트 :: setTo (const를 스칼라 &의, const를 매트 & 마스크 = 매트())

편집

내가 복사 및 선택 열의 colRange을 사용

, 다음 코드는 나를 위해 작동합니다 :

#include <opencv2/core/core.hpp> 
#include <iostream> 

int main(int argc, char** argv) 
{ 
    cv::Mat dstMat (3, 12, CV_32S); 

    for(int i = 0; i < 6; i++) 
    dstMat.colRange(2*i,2*i+2).setTo(i); 

    std::cout<< "Destination\n" << dstMat << std::endl; 
    return 0; 
} 

매트릭스가 변경되는지 확인하십시오. 너도 마찬가지 야

+0

친애하는 Kamyar, 답변 해 주셔서 대단히 감사합니다. "setTo"에서 마스크를 사용하기 위해 여러 번 시도했지만 실패했습니다. 어떻게 사용하는지 예제 코드 나 제안 사항이 있습니까? OpenCV에 대한 새로운 경험이 있습니다. 다시 감사합니다. 안부. –

+0

마스크를 만드는 데 훨씬 더 많은 코드가 필요합니다. 복사하고 싶지 않은 곳에 1을 넣고 싶지 않은 곳에 0을 넣어야합니다. colRange를 사용하여 샘플 코드로 내 대답을 편집했습니다. –

+0

친애하는 Kamyar, 유용한 답변을 주셔서 대단히 감사합니다. 안부. –

관련 문제