множественное условие с ++ - PullRequest
0 голосов
/ 07 марта 2020

Каков наилучший способ кодирования этого условия в C ++?

Я пытался его закодировать, но оно выглядит слишком сложным и имеет ошибки при компиляции

                     if(alpha <= hsv_image[2].at<float>(i,j)/hsv_bkg[2].at<float>(i,j))
                                {
                         D = min(...);
                                    if( abs(hsv_image[1].at<uchar>(i,j)-hsv_bkg[1].at<uchar>(i,j))<=T_value && D<=T_value){
                                        ...

                                    }
                                }
                }

Ответы [ 2 ]

1 голос
/ 07 марта 2020

Из того, что я могу прочитать из этого, вы могли бы сначала вычислить три внутренних условия:

auto val1 = IVt(x,y) / BVt(x,y);
bool cond1 = alpha <= val1 && val1 <= beta;

auto val2 = ISt(x,y) - BSt(x,y);
bool cond2 = val2 <= Ts;

bool cond3 = Dh <= Th;

И затем результат должен быть:

bool result = cond1 && cond2 && cond3;
0 голосов
/ 07 марта 2020

Из того, что я вижу, вы используете OpenCV. Я сейчас изучаю это сам, и я не эксперт, но я вижу, что вы пытаетесь выполнять операции попиксельно. Это вызывает ОГРОМНУЮ проблему производительности в OpenCV. Вам нужно оперировать целым изображением сразу.

Например, ваше уравнение можно записать в OpenCV примерно так (возможно, в нем есть ошибки, оно быстро пришло мне в голову, и я учусь сам) ):

Mat mask1, mask2, sub, res;
divide(IV, BV, mask1);
inRange(mask1, Scalar(alpha), Scalar(beta), mask2);
abs(IS - BS, sub);
auto D = min(...);
bitwise_and(sub, D, res, mask2);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...