Я использую программу на Python для получения изображения с научной камеры.Эта часть в порядке, я могу получить 16-битное изображение в массиве.Проблема возникает, когда я хочу отобразить изображение в окне qt (я использую QGraphicsWindow), способ отображения изображения очень странный.Чтобы отобразить изображение, я конвертирую 2d массив в растровое изображение, которое затем исчезает.Я пробовал разные вещи, но лучшие результаты получены для следующих кодов:
def array2Pixmap(arr):
arr_uint8 = arr.view(dtype=numpy.uint8)
im8 = Image.fromarray(arr_uint8)
imQt = QtGui.QImage(ImageQt.ImageQt(im8))
pix = QtGui.QPixmap.fromImage(imQt)
return pix
, который дает следующий результат: ![enter image description here](https://i.stack.imgur.com/pgNNe.png)
и этот:
def array2Pixmap(arr):
arr_uint8 = arr.astype(numpy.uint8)
im8 = Image.fromarray(arr_uint8)
imQt = QtGui.QImage(ImageQt.ImageQt(im8))
pix = QtGui.QPixmap.fromImage(imQt)
return pix
, что дает это для точно таких же условий съемки (время экспозиции камеры, интенсивность света и т. Д.): ![enter image description here](https://i.stack.imgur.com/UHAQ5.png)
Так что теперь я 'Я ищу способ правильно отобразить изображение.Ты хоть представляешь, что я делаю не так?
Спасибо
РЕДАКТИРОВАТЬ
Вот пример того, что такое обр.Команда print(arr)
возвращает
[[100 94 94 ... 97 98 98]
[ 97 100 98 ... 98 101 99]
[100 95 98 ... 104 98 102]
...
[ 98 98 98 ... 96 98 100]
[ 94 100 102 ... 92 98 104]
[ 97 90 96 ... 96 97 100]]
, а print(type(arr))
возвращает
<class 'numpy.ndarray'>
РЕДАКТИРОВАТЬ
Хорошо, у меня есть новости.Я изменил свой код так, что теперь преобразование в 8-битный идентификатор массива выполняется следующим образом:
arr = numpy.around(arr*(2^8-1)/(2^16-1))
arr_uint8 = arr.astype(numpy.uint8)
Если я отображаю изображение с помощью matplotlib.pyplot.imshow(arr, cmap='gray')
, оно работает, и изображение отображается в редакторе следующим образом:
![enter image description here](https://i.stack.imgur.com/5bqM2.png)
, но когда я конвертирую его в QPixmap, результат такой же, как и раньше.
Что странно, когда яиспользуйте arr_uint8 = arr.view(dtype=numpy.uint8)
для преобразования в 8 бит, в результате получается массив 2048 * 4096 вместо 2048 * 2048.Я не понимаю, почему ...