Kyl*_*ald 7 c++ opencv image-processing clamp
我有一个OpenCv Mat
,我将用于每像素重新映射,称为remap
有CV_32FC2
元素.
其中一些元素可能超出了重映射的允许范围.所以我需要将它们夹在Point2f(0, 0)
和之间Point2f(w, h)
.使用OpenCv 2.x实现此目的的最短或最有效的方法是什么?
这是一个解决方案:
void clamp(Mat& mat, Point2f lowerBound, Point2f upperBound) {
vector<Mat> matc;
split(mat, matc);
min(max(matc[0], lowerBound.x), upperBound.x, matc[0]);
min(max(matc[1], lowerBound.y), upperBound.y, matc[1]);
merge(matc, mat);
}
Run Code Online (Sandbox Code Playgroud)
但我不确定它是否是最短的,或者分裂/合并是否有效.
尝试拆分、使用cvThreshold
然后合并。您也可以使用 usingcvSetImageCOI
来避免分裂。我不确定阈值代码是否支持 COI。
您可能想要分析两个版本并比较它们的性能。我有一种感觉,它也会做同样的事情。