필자는 matlab에서와 같이 정확한 구조 요소가 필요하므로 필자는 필자의 필요에 따라이 함수를 작성했다. 그것은 당신이 수동으로 다른 값을 추가 할 수 3 21 (사이의 행/열 홀수와 모양 작동 ()는 매트랩 # 0을 확인
을 함수는 다음과 같이 호출됩니다.
int Radius = 1;
// following call equivalent to Matlab's sel = getnhood(strel('disk',Radius))
cv::Mat sel = strelDisk(Radius);
실제 기능은
cv::Mat strelDisk(int Radius){
// THIS RETURNS STREL('DISK',RADIUS) LIKE IN MATLAB FOR RADIUS = ODD NUMBER BETWEEN 3-->21
cv::Mat sel((2*Radius-1),(2*Radius-1),CV_8U,cv::Scalar(255));
int borderWidth;
switch (Radius){
case 1: borderWidth = 0; break;
case 3: borderWidth = 0; break;
case 5: borderWidth = 2; break;
case 7: borderWidth = 2; break;
case 9: borderWidth = 4; break;
case 11: borderWidth = 6; break;
case 13: borderWidth = 6; break;
case 15: borderWidth = 8; break;
case 17: borderWidth = 8; break;
case 19: borderWidth = 10; break;
case 21: borderWidth = 10; break;
}
for (int i=0; i<borderWidth; i++){
for (int j=0; j<borderWidth; j++){
if (i+j<8){
sel.at<uchar>(i,j)=0;
sel.at<uchar>(i,sel.cols-1-j)=0;
sel.at<uchar>(sel.rows-1-i,j)=0;
sel.at<uchar>(sel.rows-1-i,sel.cols-1-j)=0;
}
}
}
return sel;
입니다.