Считывание пикселей из изображения в python, как в Labview

#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. Мне нужна была еще одна помощь. После вычислений в моем проекте я хочу распечатать результат, включающий все числа.