Я проводил некоторые тесты, основываясь на своем понимании, прочитав документацию, но наткнулся на это.
Источник: NumPy конвертирует 8-битное изображение в 16/32-битное.
i = cv2.imread(imgNameIn, cv2.CV_LOAD_IMAGE_COLOR) # Need to be sure to have a 8-bit input
img = np.array(i, dtype=np.uint16) # This line only change the type, not values
img *= 256 # Now we get the good values in 16 bit format
Но из того, что я прочитал здесь http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html
Чтобы уменьшить масштаб с 32 бит до 8 бит, нужно разделить на 255 вместо 256, упомянутых выше, которые я получил из другого поста? Этот код ниже - это то, с чем я пытаюсь поиграть.
Был бы признателен, если бы кто-нибудь мог проверить, правильно ли я сделал масштабирование. Я задаю этот вопрос главным образом для того, чтобы подтвердить, является ли предполагаемое значение приведения значением 255 или 256?
uint8
, вы умножаете наибольшее значениеfloat
(1) на 255, чтобы получить наибольшее значениеuint8
(255). И аналогично, самое большое числоuint8
равно 255, поэтому, чтобы получить наибольшее значениеfloat
, вы должны разделить на 255, чтобы вернуться к 1. Просто как. С другой стороны, пожалуйста, используйте лучшие имена переменных. И утомитесь присваивать изображения другим изображениям; это может ссылаться на одно и то же в памяти. Используйте.copy()
для массивов numpy для создания новых копий. - person alkasm   schedule 28.08.2017