#python #image
#python #изображение
Вопрос:
Мне нужно интегрировать мой код python в Labview, и я сравниваю значение пикселя изображения в обоих. Labview выдает значения пикселей в U16, и, следовательно, я хочу увидеть значения пикселей в описании ввода изображения здесь же, на том же изображении в python, и посмотреть, совпадают ли значения. Может кто-нибудь, пожалуйста, помочь мне с кодом для того же? Мое изображение представляет собой черно-белое изображение в формате png.
Ответ №1:
Для этого вы можете использовать PIL или OpenCV или wand или scikit-image. Вот версия PIL:
from PIL import Image
import numpy as np
# Open image
im = Image.open('dXGat.png')
# Make into Numpy array for ease of access
na = np.array(im)
# Print shape (pixel dimensions) and data type
print(na.shape,na.dtype) # prints (256, 320) int32
# Print brightest and darkest pixel
print(na.max(), na.min())
# Print top-left pixel
print(na[0,0]) # prints 25817
# WATCH OUT FOR INDEXING - IT IS ROW FIRST
# print first pixel in second row
print(na[1,0]) # prints 24151
# print first 4 columns of first 2 rows
print(na[0:2,0:4])
Вывод
array([[25817, 32223, 30301, 33504],
[24151, 22934, 19859, 21460]], dtype=int32)
Если вы предпочитаете использовать OpenCV, измените эти строки:
from PIL import Image
import numpy as np
# Open image
im = Image.open('dXGat.png')
# Make into Numpy array for ease of access
na = np.array(im)
для этого:
import cv2
import numpy as np
# Open image
na = cv2.imread('dXGat.png',cv2.IMREAD_UNCHANGED)
Если вы просто хотите один раз проверить пиксели, вы можете просто использовать ImageMagick в терминале:
magick dXGat.png txt: | more
Пример вывода
# ImageMagick pixel enumeration: 320,256,65535,gray
0,0: (25817) #64D964D964D9 gray(39.3942%)
1,0: (32223) #7DDF7DDF7DDF gray(49.1691%)
2,0: (30301) #765D765D765D gray(46.2364%)
3,0: (33504) #82E082E082E0 gray(51.1238%)
...
...
317,255: (20371) #4F934F934F93 gray(31.0842%)
318,255: (20307) #4F534F534F53 gray(30.9865%)
319,255: (20307) #4F534F534F53 gray(30.9865%)
Комментарии:
1. Привет, спасибо за вашу помощь. Как я могу получить значения в U16.
2. Если U16 означает 16-разрядный без знака, просто измените тип следующим образом
na = np.array(im).astype(np.uint16)
3. Привет, это все еще не совпадает с ответом, который мы получаем от Labview
4. Ваши значения, похоже, масштабируются в 64 раза по сравнению с тем, что думают PIL , OpenCV и ImageMagick , поэтому вы можете использовать
na = (np.array(im)//64).astype(np.uint16)
5. Мне нужна была еще одна помощь. После вычислений в моем проекте я хочу распечатать результат, включающий все числа.