मैं matlab में के रूप में सटीक संरचना तत्व की जरूरत है, इसलिए मैं अपने जरूरत के लिए यह (बहुत ही सुंदर नहीं) समारोह में लिखा था। यह आप मैन्युअल रूप से अन्य मूल्यों जोड़ सकते हैं 3 और 21 (के बीच पंक्तियों/स्तंभों की एक विषम संख्या के साथ आकार के लिए काम करता है (मैटलैब में # शून्य जांच)
समारोह इस तरह शुरू हो जाती है।
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;
है
स्रोत
2014-05-07 10:28:35