OpenCV inRange меняет тип Mat

Я не могу избавиться от этой ошибки в OpenCV:

Ошибка OpenCV: размеры входных аргументов не совпадают (операция
ни ‘array 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

1

Решение

Это нормально, так как inRange возвращает 1-канальную маску (значение для каждого пикселя), поэтому для выполнения побитовой операции просто преобразуйте маску обратно в 3-канальное изображение:

cvtColor(img3,img3,CV_GRAY2BGR);
bitwise_and(img1, img3, img4);// now both images are CV_8UC3 (=16)

РЕДАКТИРОВАТЬ: как говорит Берак, чтобы изменить количество каналов, которые вы должны использовать cvtColorне Mat::convertTo, Извини за это.

1

Другие решения


По вопросам рекламы [email protected]