Давайте посмотрим на следующий пример:
cv::Mat mat1 = cv::Mat(150, 150, CV_8UC4, cv::Scalar(255, 0, 0, 255));
cv::rectangle(mat1, cv::Point(0, 0), cv::Point(49, 150), cv::Scalar(255, 0, 0, 64), cv::FILLED);
cv::rectangle(mat1, cv::Point(50, 0), cv::Point(99, 150), cv::Scalar(255, 0, 0, 128), cv::FILLED);
cv::Mat mat2 = cv::Mat(150, 150, CV_8UC4, cv::Scalar(0, 0, 255, 255));
cv::rectangle(mat2, cv::Point(0, 0), cv::Point(150, 49), cv::Scalar(0, 0, 255, 64), cv::FILLED);
cv::rectangle(mat2, cv::Point(0, 50), cv::Point(150, 99), cv::Scalar(0, 0, 255, 128), cv::FILLED);
std::vector<cv::Mat> mat1_split;
std::vector<cv::Mat> mat2_split;
cv::split(mat1, mat1_split);
cv::split(mat2, mat2_split);
cv::Mat inter = mat1_split[3] & mat2_split[3];
cv::Mat multiplier = (mat1_split[3] & mat2_split[3]) / 255 + 1;
cv::imwrite("images/mat1.png", mat1);
cv::imwrite("images/mat2.png", mat2);
cv::imwrite("images/inter.png", inter);
cv::imwrite("images/multiplier.png", multiplier);
У нас есть mat1
, как это:
![mat1](https://i.stack.imgur.com/Cjb0p.png)
И у нас есть mat2
вот так:
![mat2](https://i.stack.imgur.com/iXSXq.png)
Частичные прозрачные пленки для mat1
и mat2
: 64
и 128
, см. Код выше.
Промежуточный результат (inter
) двоичного оператора И &
выглядит следующим образом:
![inter](https://i.stack.imgur.com/SJ0pT.png)
Поскольку это двоичное И, вы получите 0
за комбинацию 64
и 128
(первая строка, второй столбец, а также вторая строка, первый столбец), но, например, вы ' получим 64
за комбинацию 64
и 64
(первый ряд, первый столбец). С другой стороны, вы также получите 64
для комбинации 64
и 255
(первый ряд, третий столбец, а также третий ряд, первый столбец).
Итак, это "синтаксическая" часть, но "семантическая" за этим стоит? Я думаю, вам нужно спросить автора этого фрагмента кода. Я не получаю смысла отменять альфа-каналы, если они не совпадают (64
и 128
), но сохраняет их, если они совпадают (64
и 64
). (Особенно, если учесть, что объединение 64
и 127
также даст 64
...)
multiplier
равно 1
для всех пикселей, где объединенное значение меньше или равно 127
, а 2
в противном случае. Опять же, по поводу "семантической" части спросите у автора.
Надеюсь, это поможет - хотя бы немного.