簡體   English   中英

設置opencv c ++函數的邊框類型:erode()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM