PutText 重叠问题 - 图片
PutText overlap issue - image
我正在使用 FLIR Lepton 相机捕捉热图像,然后尝试使用 PutText 方法在图像上显示温度,但得到的结果非常奇怪。提前感谢任何建议。
代码:
import cv2
import numpy as np
image_counter = 0
video = cv2.VideoCapture(0,cv2.CAP_DSHOW)
video.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
video.set(cv2.CAP_PROP_CONVERT_RGB, 0)
if video.isOpened():
rval, frame = video.read()
else:
rval = False
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
while rval:
rval, frame = video.read()
frame_roi = frame[:-3, :]
normed = cv2.normalize(frame_roi, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
cl1 = clahe.apply(normed)
nor = cv2.cvtColor(cl1, cv2.COLOR_GRAY2BGR)
color = cv2.applyColorMap(nor, cv2.COLORMAP_JET)
for i in range(frame.shape[0]):
for j in range(frame.shape[1]):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (10,30), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
cv2.imshow("preview", cv2.resize(color, dsize=(640,480), interpolation=cv2.INTER_LINEAR))
key = cv2.waitKey(100)
if key == 27: # exit on ESC
break
看这里:
for i in range(frame.shape[0]):
for j in range(frame.shape[1]):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (10,30), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
你基本上是循环遍历图像的每个像素,获取它的温度并将温度写在图像上。
但是您在图像的一个位置写入每个温度;在 (10, 30)
,所以如果有 1000 个像素,您将在图像的一个点上写下 1000 个温度。
不可能将图像上检测到的每个温度都展开而不重叠,除非每个文本只有一个像素大小,可以覆盖整个屏幕。
您可以尝试这样的操作:
for i in range(0, frame.shape[0], 50):
for j in range(0, frame.shape[1], 50):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (i,j), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
图像上每隔 50 个像素显示一次温度。
我正在使用 FLIR Lepton 相机捕捉热图像,然后尝试使用 PutText 方法在图像上显示温度,但得到的结果非常奇怪。提前感谢任何建议。
代码:
import cv2
import numpy as np
image_counter = 0
video = cv2.VideoCapture(0,cv2.CAP_DSHOW)
video.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter.fourcc('Y','1','6',' '))
video.set(cv2.CAP_PROP_CONVERT_RGB, 0)
if video.isOpened():
rval, frame = video.read()
else:
rval = False
clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
while rval:
rval, frame = video.read()
frame_roi = frame[:-3, :]
normed = cv2.normalize(frame_roi, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
cl1 = clahe.apply(normed)
nor = cv2.cvtColor(cl1, cv2.COLOR_GRAY2BGR)
color = cv2.applyColorMap(nor, cv2.COLORMAP_JET)
for i in range(frame.shape[0]):
for j in range(frame.shape[1]):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (10,30), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
cv2.imshow("preview", cv2.resize(color, dsize=(640,480), interpolation=cv2.INTER_LINEAR))
key = cv2.waitKey(100)
if key == 27: # exit on ESC
break
看这里:
for i in range(frame.shape[0]):
for j in range(frame.shape[1]):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (10,30), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
你基本上是循环遍历图像的每个像素,获取它的温度并将温度写在图像上。
但是您在图像的一个位置写入每个温度;在 (10, 30)
,所以如果有 1000 个像素,您将在图像的一个点上写下 1000 个温度。
不可能将图像上检测到的每个温度都展开而不重叠,除非每个文本只有一个像素大小,可以覆盖整个屏幕。
您可以尝试这样的操作:
for i in range(0, frame.shape[0], 50):
for j in range(0, frame.shape[1], 50):
pixel = frame [i,j]
Temp_C = pixel/100 - 273.15
color = cv2.putText(color, "{:.2f}".format(Temp_C), (i,j), cv2.FONT_HERSHEY_SIMPLEX, 0.45, cv2.LINE_AA)
print (Temp_C)
图像上每隔 50 个像素显示一次温度。