Как выполнить операцию объединения в Java OpenCV - PullRequest
0 голосов
/ 30 апреля 2018

Мне нужно написать эквивалентный Java OpenCV код как этот C++ код

Mat1b mask1, mask2;
inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat1b mask = mask1 | mask2;

Когда я пытался использовать оператор |, это приводило к ошибке.

Mat mask1 = new Mat();
Mat mask2 = new Mat();
Core.inRange(hsv, new Scalar(0, 70, 50), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(170, 70, 50), new Scalar(180, 255, 255), mask2);

Mat hsvThres = mask1 | mask2;

Ошибка: The operator | is undefined for the argument type(s) org.opencv.core.Mat

Ответы [ 2 ]

0 голосов
/ 08 мая 2018

Оператор объединения, logic-or (|) для двух матриц OpenCV:

Код на C ++:

inRange(hsv, Scalar(0, 70, 50), Scalar(10, 255, 255), mask1);
inRange(hsv, Scalar(170, 70, 50), Scalar(180, 255, 255), mask2);

Mat mask = mask1 | mask2; 

Код на Java:

Mat mask1 = new Mat();
Mat mask2 = new Mat();
Core.inRange(hsv, new Scalar(0, 70, 50), new Scalar(10, 255, 255), mask1);
Core.inRange(hsv, new Scalar(170, 70, 50), new Scalar(180, 255, 255), mask2);

Mat mask= new Mat();
Core.bitwise_or(mask1, mask2, mask);

Код в Python:

mask1 = cv2.inRange(hsv, (0, 70, 50), (10, 255, 255))
mask2 = cv2.inRange(hsv, (170, 70, 50), (180, 255, 255))
mask = cv2.bitwise_or(mask1, mask2)
0 голосов
/ 30 апреля 2018

Я думаю, что вы ошибаетесь, пытаясь сравнить две Mat ссылки на объекты, а не значения под ними. Я не очень знаком с openCV, но я предполагаю, что вы пытаетесь объединить значения под ними, так что вы можете использовать метод https://docs.opencv.org/java/2.4.2/org/opencv/core/Mat.html#nativeObj., который эта строка будет переписана как: Mat hsvThres = new Mat(mask1.nativeObj | mask2.nativeObj);

...