我需要将 OpenCV 函数应用dilate()
到erode()
一个Mat
实际上是更大图像中的 ROI 的对象。Mat roiImg
通过在原始图像中为 ROI 创建标题来生成img
:
Mat img = imread(...);
Mat roiImg = img (Rect(...));
这是 的参数列表erode()
:
void erode(InputArray src, OutputArray dst, InputArray kernel, Pointanchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar& borderValue=morphologyDefaultBorderValue() )
问题是,由于我对函数 erode/dilate 的输入图像是 ROI 的标头,因此选择BORDER_CONSTANT
边界类型以及边界值等于morphologyDefaultBorderValue()
似乎没有任何影响,并且边界值是从原始获得的图片。
然后我在文档中找到了这个copyMakeBorder()
:
当源图像是更大图像的一部分(ROI)时,该函数将尝试使用 ROI 之外的像素来形成边框。要禁用此功能并始终进行外推,就好像
src
不是 ROI,请使用borderType |BORDER_ISOLATED
.
但是,cv::borderInterpolate()
这是从函数内部调用的erode()
函数,不接受BORDER_ISOLATED
作为有效的边框类型!
现在,要解决这个问题,我必须克隆roiImg
,然后调用erode()
. 但理想情况下,我不想要克隆的开销。有没有办法解决这个问题?