Created
May 30, 2024 02:23
-
-
Save Y-k-Y/d08c6b233d7ce7e670a7794753d74e16 to your computer and use it in GitHub Desktop.
Workaround to avoid way to bright frame while using Lepton camera
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import subprocess | |
import numpy as np | |
# I'm using this package for convenience detecting and capturing Lepton camera. It's not neccessary tho. | |
from flirpy.camera.lepton import Lepton | |
def ktoc(val): | |
return (val - 27315) / 100.0 | |
def ctok(val): | |
return val * 100 + 27315 | |
def generate_colour_map(): | |
lut = np.zeros((256, 1, 3), dtype=np.uint8) | |
colourmap_ironblack = [ | |
255, 255, 255, 253, 253, 253, 251, 251, 251, 249, 249, 249, 247, 247, | |
247, 245, 245, 245, 243, 243, 243, 241, 241, 241, 239, 239, 239, 237, | |
237, 237, 235, 235, 235, 233, 233, 233, 231, 231, 231, 229, 229, 229, | |
227, 227, 227, 225, 225, 225, 223, 223, 223, 221, 221, 221, 219, 219, | |
219, 217, 217, 217, 215, 215, 215, 213, 213, 213, 211, 211, 211, 209, | |
209, 209, 207, 207, 207, 205, 205, 205, 203, 203, 203, 201, 201, 201, | |
199, 199, 199, 197, 197, 197, 195, 195, 195, 193, 193, 193, 191, 191, | |
191, 189, 189, 189, 187, 187, 187, 185, 185, 185, 183, 183, 183, 181, | |
181, 181, 179, 179, 179, 177, 177, 177, 175, 175, 175, 173, 173, 173, | |
171, 171, 171, 169, 169, 169, 167, 167, 167, 165, 165, 165, 163, 163, | |
163, 161, 161, 161, 159, 159, 159, 157, 157, 157, 155, 155, 155, 153, | |
153, 153, 151, 151, 151, 149, 149, 149, 147, 147, 147, 145, 145, 145, | |
143, 143, 143, 141, 141, 141, 139, 139, 139, 137, 137, 137, 135, 135, | |
135, 133, 133, 133, 131, 131, 131, 129, 129, 129, 126, 126, 126, 124, | |
124, 124, 122, 122, 122, 120, 120, 120, 118, 118, 118, 116, 116, 116, | |
114, 114, 114, 112, 112, 112, 110, 110, 110, 108, 108, 108, 106, 106, | |
106, 104, 104, 104, 102, 102, 102, 100, 100, 100, 98, 98, 98, 96, 96, | |
96, 94, 94, 94, 92, 92, 92, 90, 90, 90, 88, 88, 88, 86, 86, 86, 84, 84, | |
84, 82, 82, 82, 80, 80, 80, 78, 78, 78, 76, 76, 76, 74, 74, 74, 72, 72, | |
72, 70, 70, 70, 68, 68, 68, 66, 66, 66, 64, 64, 64, 62, 62, 62, 60, 60, | |
60, 58, 58, 58, 56, 56, 56, 54, 54, 54, 52, 52, 52, 50, 50, 50, 48, 48, | |
48, 46, 46, 46, 44, 44, 44, 42, 42, 42, 40, 40, 40, 38, 38, 38, 36, 36, | |
36, 34, 34, 34, 32, 32, 32, 30, 30, 30, 28, 28, 28, 26, 26, 26, 24, 24, | |
24, 22, 22, 22, 20, 20, 20, 18, 18, 18, 16, 16, 16, 14, 14, 14, 12, 12, | |
12, 10, 10, 10, 8, 8, 8, 6, 6, 6, 4, 4, 4, 2, 2, 2, 0, 0, 0, 0, 0, 9, | |
2, 0, 16, 4, 0, 24, 6, 0, 31, 8, 0, 38, 10, 0, 45, 12, 0, 53, 14, 0, | |
60, 17, 0, 67, 19, 0, 74, 21, 0, 82, 23, 0, 89, 25, 0, 96, 27, 0, 103, | |
29, 0, 111, 31, 0, 118, 36, 0, 120, 41, 0, 121, 46, 0, 122, 51, 0, 123, | |
56, 0, 124, 61, 0, 125, 66, 0, 126, 71, 0, 127, 76, 1, 128, 81, 1, 129, | |
86, 1, 130, 91, 1, 131, 96, 1, 132, 101, 1, 133, 106, 1, 134, 111, 1, | |
135, 116, 1, 136, 121, 1, 136, 125, 2, 137, 130, 2, 137, 135, 3, 137, | |
139, 3, 138, 144, 3, 138, 149, 4, 138, 153, 4, 139, 158, 5, 139, 163, | |
5, 139, 167, 5, 140, 172, 6, 140, 177, 6, 140, 181, 7, 141, 186, 7, | |
141, 189, 10, 137, 191, 13, 132, 194, 16, 127, 196, 19, 121, 198, 22, | |
116, 200, 25, 111, 203, 28, 106, 205, 31, 101, 207, 34, 95, 209, 37, | |
90, 212, 40, 85, 214, 43, 80, 216, 46, 75, 218, 49, 69, 221, 52, 64, | |
223, 55, 59, 224, 57, 49, 225, 60, 47, 226, 64, 44, 227, 67, 42, 228, | |
71, 39, 229, 74, 37, 230, 78, 34, 231, 81, 32, 231, 85, 29, 232, 88, | |
27, 233, 92, 24, 234, 95, 22, 235, 99, 19, 236, 102, 17, 237, 106, 14, | |
238, 109, 12, 239, 112, 12, 240, 116, 12, 240, 119, 12, 241, 123, 12, | |
241, 127, 12, 242, 130, 12, 242, 134, 12, 243, 138, 12, 243, 141, 13, | |
244, 145, 13, 244, 149, 13, 245, 152, 13, 245, 156, 13, 246, 160, 13, | |
246, 163, 13, 247, 167, 13, 247, 171, 13, 248, 175, 14, 248, 178, 15, | |
249, 182, 16, 249, 185, 18, 250, 189, 19, 250, 192, 20, 251, 196, 21, | |
251, 199, 22, 252, 203, 23, 252, 206, 24, 253, 210, 25, 253, 213, 27, | |
254, 217, 28, 254, 220, 29, 255, 224, 30, 255, 227, 39, 255, 229, 53, | |
255, 231, 67, 255, 233, 81, 255, 234, 95, 255, 236, 109, 255, 238, 123, | |
255, 240, 137, 255, 242, 151, 255, 244, 165, 255, 246, 179, 255, 248, | |
193, 255, 249, 207, 255, 251, 221, 255, 253, 235, 255, 255, 24] | |
def chunk( | |
ulist, step): return map( | |
lambda i: ulist[i: i + step], | |
range(0, len(ulist), | |
step)) | |
chunks = chunk(colourmap_ironblack, 3) | |
red = [] | |
green = [] | |
blue = [] | |
for chunk in chunks: | |
red.append(chunk[0]) | |
green.append(chunk[1]) | |
blue.append(chunk[2]) | |
lut[:, 0, 0] = blue | |
lut[:, 0, 1] = green | |
lut[:, 0, 2] = red | |
return lut | |
def raw_to_8bit(data): | |
cv2.normalize(data, data, 0, 65535, cv2.NORM_MINMAX) | |
np.right_shift(data, 8, data) | |
return cv2.cvtColor(np.uint8(data), cv2.COLOR_GRAY2RGB) | |
def display_temperature(img, val_k, loc, color): | |
val = ktoc(val_k) | |
cv2.putText(img,"{0:.1f} C".format(val), loc, cv2.FONT_HERSHEY_SIMPLEX, 0.75, color, 2) | |
x, y = loc | |
cv2.line(img, (x - 2, y), (x + 2, y), color, 1) | |
cv2.line(img, (x, y - 2), (x, y + 2), color, 1) | |
cam = Lepton() | |
colour_map = generate_colour_map() | |
while True: | |
img_raw = cam.grab() | |
# Getting numpy array to further process | |
arr_raw = np.array(img_raw) | |
# Replacing array values if the !value > 0 | |
arr_processed = np.where(arr_raw > 0, arr_raw, ctok(20)) | |
arr_resized = cv2.resize(arr_processed[:,:], (640, 480)) | |
minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(arr_resized) | |
img = raw_to_8bit(arr_resized) | |
img_ironblack = cv2.LUT(img, colour_map) | |
display_temperature(img, maxVal, maxLoc, (0, 0, 255)) | |
display_temperature(img_ironblack, maxVal, maxLoc, (0, 0, 255)) | |
cv2.imshow('Lepton', img) | |
cv2.imshow('Lepton(ironblack)', img_ironblack) | |
if cv2.waitKey(5) == 27: | |
break | |
cv2.destroyAllWindows() | |
cam.close() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment