Я не могу избавиться от этой ошибки в OpenCV:OpenCV InRange меняет тип Mat
OpenCV Error: Sizes of input arguments do not match (The operation is neither 'array op array' (where arrays have the same size and type), nor 'array op scalar', nor 'scalar op array')
я узнал с Mat.type();
, что всеми моими Mat(img)
имеет тип 16, но после того, как функция inRange
моего img3
измененного типа 0, . Тогда я не могу использовать функцию bitwise_and
, потому что у нее нет того же типа.
Как его преобразовать в тот же тип?
Mat img1 = imread(argv[1], 1);
Mat img2, img3, img4;
cvtColor(img1, img2, CV_BGR2HSV);
GaussianBlur(img2, img2, Size(15,15), 0);
inRange(img2, Scalar(h_min_min,s_min_min,v_min_min), Scalar(h_max_min,s_max_min,v_max_min), img3); // now img3 changed type to 0
bitwise_and(img1, img3, img4); // img1.type()=16, img3.type()=0 ERROR
Для всех целей и задач 'inRange' в OpenCV дает вам пороговое двоичное изображение. Тип 'CV_8U', если я не ошибаюсь. Попробуйте преобразовать его обратно в желаемый тип, используя 'img3.convertTo (img3, CV_16U)' или все, что вам нужно. – Xonxt
Благодарим за быстрый ответ, но после img3.convertTo (img3, CV_16U) тип равен 2, а после img3.convertTo (img3, 16) является типом еще 0 – User
чего вы хотите достичь? установить все элементы в ноль, которые не входят в диапазон? вместо bitwise_and попробуйте 'img1.copyTo (img4, img3);' и попробуйте 'imshow (" img3 ", img3); cv :: waitKey (0); ', чтобы проверить, дает ли' inRange' результат, который вы хотите получить. – Micka