2013-03-15 2 views
3

다음과 같이 5x5 행렬을 사용하여 11x11 행렬을 만드는 것을 좋아합니다. 이것보다 좋은 방법이 있습니까?OpenCV에서 부분 행렬을 사용하여 큰 행렬 만들기

int csz = 5; 
Mat zz = Mat::zeros(csz, csz, CV_32FC1); 
Mat oo = Mat::ones(csz, csz, CV_32FC1); 
Mat hh = 0.5 * Mat::ones((csz*2 + 1), 1, CV_32FC1);//column matrix 
cv::Mat chkpat1((csz * 2 + 1), (csz * 2 + 1), CV_32FC1); 
chkpat1(Range(0, 5),Range(0, 5)) = zz;//first quadrant 
chkpat1(Range(0, 5),Range(6, 11)) = oo;//second quadrant 
chkpat1(Range(5, 11),Range(0, 5)) = oo;//third quadrant 
chkpat1(Range(6, 11),Range(6, 11)) = oo;//fourth quadrant 
chkpat1(Range(0, 11),Range(5, 6)) = hh;//middle column 
chkpat1(Range(5, 6),Range(0, 11)) = hh.t();//middle row 

답변

1

이 짧은, 그래서 그런 의미에서이다 더 나은 :

cv::Mat chkpat1(11, 11, CV_32FC1, cv::Scalar(1.0f)); 
    chkpat1(cv::Rect(0, 0, 5, 5)) = cv::Scalar(0.0f); 
    chkpat1(cv::Rect(0, 5, 11, 1)) = cv::Scalar(0.5f); 
    chkpat1(cv::Rect(5, 0, 1, 11)) = cv::Scalar(0.5f); 

이 (나는 당신이 원하는 무슨 생각입니다) 생산 :

0 0 0 0 0 0.5 1 1 1 1 1 
0 0 0 0 0 0.5 1 1 1 1 1 
0 0 0 0 0 0.5 1 1 1 1 1 
0 0 0 0 0 0.5 1 1 1 1 1 
0 0 0 0 0 0.5 1 1 1 1 1 
0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 
1 1 1 1 1 0.5 1 1 1 1 1 
1 1 1 1 1 0.5 1 1 1 1 1 
1 1 1 1 1 0.5 1 1 1 1 1 
1 1 1 1 1 0.5 1 1 1 1 1 
1 1 1 1 1 0.5 1 1 1 1 1