Питон побитовый ИЛИ - PullRequest
       11

Питон побитовый ИЛИ

0 голосов
/ 27 августа 2018

У меня есть следующий код C ++:

// Load image from vector
        cv::Mat image = imread(filenames[i]);

        //  option = black 
        if (arg == "black" | arg == "all") 
            {

            // Extracting colors - BGR (black backround)
            // Blue
            inRange(image, Scalar(190, 0, 0), Scalar(255, 50, 50), blue);
            // Green
            inRange(image, Scalar(0, 190, 0), Scalar(50, 255, 50), green);
            // Red
            inRange(image, Scalar(0, 0, 190), Scalar(50, 50, 255), red);
            // White
            inRange(image, Scalar(235, 235, 235), Scalar(255, 255, 255), white);
            // Silver
            inRange(image, Scalar(180, 180, 190), Scalar(200, 200, 220), silver);           

            // bitwise OR mask
            mask = blue|green|red|white|silver;

            }

        //  option = wooden 
        else
            {

            // Extracting colors - BGR (wooden backround)
            // Blue
            inRange(image, Scalar(190, 0, 0), Scalar(255, 50, 50), blue);
            // Green
            inRange(image, Scalar(0, 190, 0), Scalar(50, 255, 50), green);
            // Red
            inRange(image, Scalar(0, 0, 190), Scalar(50, 50, 255), red);
            // White
            inRange(image, Scalar(235, 235, 235), Scalar(255, 255, 255), white);
            // Silver
            inRange(image, Scalar(190, 190, 200), Scalar(220, 220, 230), silver);
            // Black
            inRange(image, Scalar(0, 0, 0), Scalar(40, 40, 40), black);


            // bitwise OR mask
            mask = blue|green|red|white|silver|black;


            }



        // Store mask points into a vector
        vector<Point> pts;
        findNonZero(mask, pts);

который я хочу перевести на Python. Я закончил почти с каждой частью, но не с побитовой ИЛИ частью маски.

Я попробовал следующее:

mask = np.logical_or.reduce((mask == blue, mask == green, mask == red, mask == white, mask == silver))

однако у меня это не сработало.

Что такое Python-эквивалент этой операции?

1 Ответ

0 голосов
/ 27 августа 2018

нет логического или используемого в вашем коде c ++, есть только побитовый или. Таким образом, чтобы сделать то же самое в python, вы должны использовать побитовое или там же (что |, как в C ++), а не логично.

Итак

        mask = blue|green|red|white|silver|black;

в C ++ должно быть эквивалентно

        mask = blue|green|red|white|silver|black

в питоне.

...