Я наткнулся на это:
cv::Mat Mat_out;
cv::Mat Mat2(openFingerCentroids.size(), CV_8UC1, cv::Scalar(2)); imshow("Mat2", Mat2);
cv::Mat Mat3(openFingerCentroids.size(), CV_8UC1, cv::Scalar(3)); imshow("Mat3", Mat3);
cv::bitwise_and(Mat2, Mat3, Mat_out); imshow("Mat_out", Mat_out);
Почему Mat_out содержит все 2? Побитовая операция с матрицей всех двоек и троек должна дать мне 0, верно? Поскольку 2 не равно 3?
В любом случае, это простая вещь, которую я пытался реализовать: (например, find функция MATLAB)
Mat_A = {1, 1, 0, 9, 0, 5;
5, 0, 0, 0, 9, 0;
1, 2, 0, 0, 0, 0};
Ожидаемый результат, если я ищу все 5:
Mat_out = {0, 0, 0, 0, 0, 5;
5, 0, 0, 0, 0, 0;
0, 0, 0, 0, 0, 0 };
Как я могу сделать это в OpenCV с помощью C++ ??
побитовое-и (&) не то же самое, что логическое-и (&&) ... побитовое-и выполняет и на бит, поэтому 2 & 3 == 2
тебе нужен cv::compare(a, b, out, CMP_EQ)документы
openFingerCentroids - это случайная двумерная матрица. Размер значения не имеет, поэтому здесь я об этом не упоминал.
@ vu1p3n0x: Если вы опубликуете это как ответ, я приму его. Спасибо!
Кстати, cv::Mat Out = Mat_A == 5; тоже работает.





Я не понимаю твоего вопроса. Что такое openFingerCentroids, что такое Mat2 и Mat3?