Ask Your Question
0

Can cv2.dilate using with even kernel like 2x2 or 4x4?

asked 2015-06-26 14:14:41 -0600

Shiloh gravatar image

Is that possible doing dilation with even kernel in cv2.dilate?

edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
0

answered 2015-06-26 15:22:21 -0600

LBerger gravatar image

updated 2015-06-27 04:30:31 -0600

Best way is to test

m=imread("f:/lib/opencv/samples/data/fruits.jpg",CV_LOAD_IMAGE_GRAYSCALE);
Mat m2=Mat::ones(2,2,CV_8U);
Mat m3=Mat::ones(3,3,CV_8U);
Matdst2,dst3,dst;
dilate(m,dst2,m2);
dilate(m,dst3,m3);
subtract(dst2,dst3,dst,Mat(),CV_16S);
float x = norm(dst);
cout<<"Difference between erode 2x2 and 3x3 : "<<x;

the difference is 4337.25 and for anchor (ksize = 2 or 3 in my example and anchor.x==-1) line 357 filterengine.hpp opencv 3.0

   if( anchor.x == -1 )
       anchor.x = ksize.width/2;
   if( anchor.y == -1 )
       anchor.y = ksize.height/2;
edit flag offensive delete link more

Comments

I already try it, but the kernel 2x2 and 3x3 give result the same image, and where opencv put the origin of structure element if kernel 2x2?

Shiloh gravatar imageShiloh ( 2015-06-27 01:55:33 -0600 )edit

@LBerger I'm sorry there is mistake when I writing the code, it's giving different result now, but I'm still confuse the anchor x,y value. If default value=(-1,-1) and I use kernel 2x2 so the anchor x,y=1, so it's mean the origin is in bottom right for kernel 2x2 isn't it?

Shiloh gravatar imageShiloh ( 2015-06-27 10:34:08 -0600 )edit

Yes with -1 default value is width and height which are used. Filter for 2x2 filter ksize=2 so 2/2 equal 1

_0 1

0 - -

1 - x

and center is at x

LBerger gravatar imageLBerger ( 2015-06-27 11:07:56 -0600 )edit

@LBerger ahh.. Thanks for helping me.. I understand now... :)

Shiloh gravatar imageShiloh ( 2015-06-28 04:27:27 -0600 )edit

@LBerger, can I ask the last question? Is there maximum value for parameter iterations?

Shiloh gravatar imageShiloh ( 2015-06-28 05:21:44 -0600 )edit

If Iterations value is 25 itmeans that you are going to make 25 dilate. But in opencv source code at line 1698 you can find that image is dilated only once. But operator is resize 25 times in function getStructuringElement at line 1028 . Of course results are similar. In that case you must pay attention to border value.Hence Limit is relative to source image size something like max(height,rows) of source image divide size of structuring element

PS I hope that my reading is good may be you should check it if you have a specific ned for dilate

LBerger gravatar imageLBerger ( 2015-06-28 08:08:58 -0600 )edit

I can understand your explanation very well, thank you so much for explanation and the reference source code.. :)

Shiloh gravatar imageShiloh ( 2015-06-28 10:44:20 -0600 )edit

Question Tools

1 follower

Stats

Asked: 2015-06-26 14:14:41 -0600

Seen: 1,542 times

Last updated: Jun 27 '15