I have an OpenCv Mat
that I'm going to use for per-pixel remapping, called remap
, that has CV_32FC2
elements.
Some of these elements might be outside of the allowed range for the remap. So I need to clamp them between Point2f(0, 0)
and Point2f(w, h)
. What is the shortest, or most efficient, way of accomplishing this with OpenCv 2.x?
Here's one solution:
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);
}
But I'm not sure if it's the shortest, or if split/merge is efficient.
threshold
could be used to do clamping more effectively than I show above withmin
/max
. And after reading a bit more, it looks likesplit
/merge
are the C++ equivalents ofcvSetImageCOI
/cvGetImageCOI
. – Reremouse