Как исправить «IndexError» при наведении мыши на значение пикселя, используя python? - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь получить значения пикселей из ИК-изображения с помощью движения мыши и хочу преобразовать его в температуру.Но я получаю следующую ошибку: IndexError: индекс 598 выходит за пределы для оси 0 размером 480

Любые советы о том, как это исправить, будут высоко оценены!

Я пробовалследующим образом.Он показывает значения пикселей для определенных осей x и y, но иногда пересекает пределы.

import cv2
import numpy as np
import colour
import pytemperature
from PIL import Image
def mouse_drawing(event, x, y, flags, params):
    w = params[1]
    h = params[0]
    if event == cv2.EVENT_LBUTTONDOWN:
        print("Left Click")
        print(w,h)
    elif event == cv2.EVENT_MOUSEMOVE:
        if x<=w and y<=h:
            print("Coordinates of the pixel: X: ",x,"Y: ",y)
            # Assuming sRGB encoded colour values.
            RGB = img[x,y]
            # Conversion to tristimulus values.
            XYZ = colour.sRGB_to_XYZ(RGB / 255)
            # Conversion to chromaticity coordinates.
            xy = colour.XYZ_to_xy(XYZ)
            # Conversion to correlated colour temperature in K.
            CCT = colour.xy_to_CCT(xy, 'hernandez1999')
            print('TEMP: ',pytemperature.k2c(CCT))                        
img_file = 'examples/ax8.jpg'
img1 = cv2.imread(img_file, cv2.IMREAD_COLOR)
img = np.array(img1)
p,q,z = img.shape
params = [p,q]
cv2.namedWindow('image')
cv2.setMouseCallback('image',mouse_drawing,params)
while True:
    cv2.imshow('image',img)
    if cv2.waitKey(20) & 0xFF == 27:
        break
cv2.destroyAllWindows()

В пределах диапазона формат вывода: Координаты пикселя: X: 175 Y: 51 TEMP: 11958.9911017

...