[英]Setting border type for opencv c++ function: erode()
我需要將OpenCV函數dilate()
和erode()
應用於Mat
對象,這實際上是較大圖像中的ROI。 Mat roiImg
是通過在原始圖像img
內為ROI創建標題而生成的:
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 / BORDER_CONSTANT
圖像是ROI的標題,因此選擇BORDER_CONSTANT
作為邊框類型以及等於morphologyDefaultBorderValue()
的邊框值似乎沒有任何影響,並且邊框值是從原始圖像獲得。
然后我在copyMakeBorder()
的文檔中找到了這個:
當源圖像是較大圖像的一部分(ROI)時,該功能將嘗試使用ROI外部的像素形成邊框。 要禁用此功能並始終進行推斷,就好像
src
不是ROI一樣,請使用borderType |BORDER_ISOLATED
。
但是,從erode()
函數中調用的函數cv::borderInterpolate()
不接受BORDER_ISOLATED
作為有效的邊框類型!
現在,要解決此問題,我必須克隆roiImg
,然后調用erode()
。 但理想情況下,我不需要克隆的開銷。 有什么辦法可以解決這個問題?
這似乎是OpenCV中的已知錯誤 。 在修復之前,克隆可能是最好的解決方法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.