В настоящее время я работаю над проектом, связанным с тепловыми изображениями, и мне нужно немного изменить размер полученного изображения. В настоящее время я изменяю размер на javascript (после отправки данных с веб-сервера), и это работает очень хорошо, к сожалению, новое требование означает, что мне нужно перенести это изменение размера на веб-сервер, используя python.
Я сделал это, но когда я изменяю размер, теперь я получаю «тройное перекрывающееся изображение», которого у меня нет на стороне javascript (см. Снимок экрана)
Python (рабочая версия)
nparr = np.frombuffer(temps, dtype=np.float32)
temparr = np.copy(nparr)
temparr *= (1.0/temparr.max())
// array comes in single dimension, reshapre to (width,height)
temps = temparr.reshape(int(temp_frame["width"]), int(temp_frame["height"]))
socketio.emit("thermal_image", {'data':b''+bytearray(temps),'width':temps.shape[0], 'height':temps.shape[1]}, broadcast=True)
Javascript (рабочая версия)
let bytes = new Float32Array(msg.data);
let width = msg.width;
let height = msg.height;
var mat = cv.matFromArray(height, width, cv.CV_32FC1, bytes);
let dst_mat = new cv.Mat();
let dsize = new cv.Size(1000,1000);
cv.resize(mat, dst_mat, dsize,0,0,cv.INTER_AREA);
cv.imshow(canvas_name, dst_mat);
И новый код python вместе с javascript, используемый для отображения Python (Нерабочая версия)
nparr = np.frombuffer(temps, dtype=np.float32)
temparr = np.copy(nparr)
temparr *= (1.0/temparr.max())
temps = temparr.reshape(int(temp_frame["width"]), int(temp_frame["height"]))
resized_temps = np.zeros((1000,1000), np.float32)
cv2.resize(temps, dsize=(1000,1000), dst=resized_temps, fx=0, fy=0,interpolation=cv2.INTER_AREA)
socketio.emit("thermal_image", {'data':b''+bytearray(resized_temps),
'width':resized_temps.shape[0],
'height':resized_temps.shape[1]},
broadcast=True)
Javascript (нерабочая версия)
let bytes = new Float32Array(msg.data);
let width = msg.width;
let height = msg.height;
var mat = cv.matFromArray(height, width, cv.CV_32FC1, bytes);
cv.imshow(canvas_name, dst_mat);
Как видите, единственная разница в том, что изменение размера либо в javascript, либо python, и все же результаты находятся между действительно хорошими и практически бесполезными. Я знаю, что делаю что-то неправильно, но хоть убей не могу понять этого.
На изображениях изображен один и тот же человек, но в немного разных позах. На втором изображении используется python, движение все еще видно, и при правильном расположении объект в сцене можно увидеть .. 3 раза.
РЕДАКТИРОВАТЬ: изображения изменены на более четкие