2013-02-19 3 views
1

다중 채널 매트릭스의 channel :: n의 i 번째 행에 액세스하는 구문은 무엇입니까? ..... 나는 채널 (I, J)의 요소를 액세스 할 수 있습니다 : N하지만은 행, rowRange, 같은 기능을 사용할 수있는 구문입니다OpenCV Mat에서 다중 채널에 액세스

샘플 코드 :

Mat M(10, 3, CV_32SC3); 
cout << M.at<Vec3d>(0,0)[1] << endl; // This works 
cout << M.row(0)[1] << endl; // Syntax of this 

답변

2

나는 다음 검색 생각 :

cv::Mat M(10, 3, CV_32SC3); 
cv::Mat_<cv::Vec3d> helpimg = M; 
helpimg .row(0).begin()[0][0] = 2.5; 

내가 컴파일 할 수 있지만 내가 그것을 테스트하지 않았다. 그것이 작동하는지 확인하십시오.

helpimg .col(0).begin()[0][0] = 4.5; 
+1

참고, 그 mat.col (0) 않는 깊은 복사, 그래서'helpimg의 .COL (0) .begin() [0] [0] = 당신은 COLS 값을 얻기 위해 또한 그것을 사용할 수 있습니다 4.5; 'helpimg의 내용을 변경하지 않습니다! (예, ther은 row()와 col() 사이의 차이입니다!) – berak

1

어떻게이 일에 대한 : 당신은 당신이 그것에서 필요로하는 행 또는 열을 얻기 위해 다시 결과에 row 또는 col 중 하나를 호출 할 수 있도록

cout << M.row(0).col(1) << endl; 

Mat::row 함수는 Mat을 반환합니다.

4
Mat.row(0) returns a Mat, so it's the same game as before: 

// if it's really INT 3channels(like your ex. above), you have to use m.at<Vec3i> !! 
Mat M(10, 3, CV_32SC3); 

// 3rd row 
Mat r = m.row(3);   

// r has only 1 row (3 elems), last pixel there 
cout<< r.at<Vec3i>(0,2)[0]; 
관련 문제