Самый эффективный способ фиксировать значения в мате OpenCv - PullRequest
7 голосов
/ 26 сентября 2011

У меня есть 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);   
}

Но я не уверен, является ли он самым коротким, или эффективно ли разделение / объединение.

1 Ответ

1 голос
/ 26 сентября 2011

Попробуйте разделить, используя cvThreshold, а затем объединить.Вы также можете использовать cvSetImageCOI, чтобы избежать разделения.Я не уверен, поддерживает ли пороговый код COI.

Возможно, вы захотите профилировать обе версии и сравнить их производительность.У меня такое чувство, что он сделает то же самое.

...