насколько я понимаю, blobFromImage преобразует форму img: (ширина, высота, канал) в массив 4d (n, канал, ширина, высота).
так что если вы передадите масштабный коэффициент 1/255. | размер (640,640), насколько мне известно, каждый элемент должен рассчитываться как RGB => R = R/255. | Г= Г/255. |...
Код: Выделить всё
Value = (U8 - Mean) * scale_factor
и так далее.
Я попробовал умножить выходные данные blob/ndarray * 255. и изменил форму на (640, 640, 3) и похоже, что выходное изображение представляет собой одно изображение, содержащее 9 изображений в 3 ряда и 3 столбца в оттенках серого и немного разной насыщенности? это то, что я пробовал на стороне 255. Пример выше с тем же результатом.
Код: Выделить всё
test = cv2.dnn.blobFromImage(img, 1.0/127.5, (640, 640), (127.5, 127.5, 127.5), swapRB=True)
t1 = test * 127.5
t2 = t1 + 127.5
cv2.imwrite("./test_output.jpg", t2.reshape((640, 640, 3)))
Код: Выделить всё
subtract(images[i], mean, images[i]);
multiply(images[i], scalefactor, images[i]);
другой вопрос: почему это становится серым, если ввод заполнен u8 rgb значение?
Я попытался преобразовать 4d ndarray в соответствии с выводом blobFromImage, применив аналогичную формулу. но вывод был не таким.
Я ожидал, что изображение, преобразованное в ndarray из (1, 3, w, h), вычтенное по среднему значению и умноженное на масштабный коэффициент, будет таким же, как вывод blobFromImage при преобразовании обратно в (ширина , высота, канал).
Изменить: спасибо за рекомендацию по добавлению входных и выходных изображений.
input
выход
Подробнее здесь: https://stackoverflow.com/questions/790 ... -contain-g