我是OpenCv的初学者。我查看了opencv morphological dilation filter as maximum filter和how remove binary image noise in opencv?,但我无法完全理解如何使用扩张功能。我想做一些像这张图片的功能:
http://up98.org/upload/server1/02/e/q42oinl73zpv7epkccrz.jpg
请您解释一下一步一步?我应该使用这个功能吗?
void cvDilate(
IplImage* src,
IplImage* dst,
IplConvKernel* B = NULL,
int iterations = 1
)
如果是,我应该放什么而不是
IplImage* src
IplImage* dst
B
IplConvKernel* B = NUL
int iterations = 1
它的操作如何?
我的意思是在调用函数之前我该怎么办?
我应该写什么.h和.cpp
谢谢!!!
答案 0 :(得分:0)
您正在使用普通的C OpenCV API。没错,但我更喜欢新的C ++ API
关于你的问题:
IplImage* src
- 是源图片,您已经拥有并希望它扩张;
IplImage* dst
- 是目标图片,只应在调用此函数之前声明;
IplConvKernel* B
- 用简短的词来解释这个问题有点困难,但是一个小图像的东西,通常是一个3x3像素,可以用来让你的图像功能“更加肥胖”每个给定的迭代次数,检查here。如果你让它成为一个空指针,将使用默认值,它应该足以满足大多数应用程序;
int iterations
- 每次在源图像轮廓周围使用内核以使其功能更“胖”的次数;
至于你的图像,为了达到这个结果,你应该首先进行一定数量的迭代扩张,然后将它侵蚀回相同数量的迭代。
检查此代码here。
它使用新的C ++ API,但是你不应该将它“转换”回普通的C API,因为函数的结构是完全相同的。
希望有所帮助