python - cv2.imshow() 不更新
问题描述
我想在 python 上流式传输热图像,但我只得到一个不更新的图像。热传感器停止更新温度。当我删除 cv2.imshow 时,一切正常。热传感器再次打印当前温度。我已经尝试了很多其他选项,比如plt.imshow(cv2.cvtColor(image, cv2.BGR2RGB))
plt.show()
或者我在代码下面评论的内容,但似乎没有任何效果。请参阅下面我的代码:
import socket
import pickle
import numpy as np
import cv2
from matplotlib import pyplot as plt
HEADERSIZE = 8355
host = ''
port = 1238
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host, port))
while True:
full_msg = b''
new_msg = True
while True:
msg = s.recv(8355)
if new_msg:
print(f"new message length: {msg[:HEADERSIZE]}")
msglen = int(msg[:HEADERSIZE])
new_msg = False
full_msg += msg
if len(full_msg) - HEADERSIZE == msglen:
print("Full msg recvd")
print(full_msg[HEADERSIZE:])
d = pickle.loads(full_msg[HEADERSIZE:])
print(d)
image = np.array(d)
image = cv2.resize(image, (300, 300))
print(image)
plt.imsave('color_img1.jpg', image)
img = cv2.imread('color_img1.jpg', 1)
#plt.imshow(cv2.cvtColor(image, cv2.COLOR_BGR2HSV))
#plt.show()
#cv2.imshow('lmao', img)
#cv2.waitKey(0)
new_msg = True
full_msg = b''
print(full_msg)
解决方案
您必须设置与传感器帧速率兼容的 waitKey 输入值。例如,如果您每 100 毫秒获取一次新图像,则应为 waitKey 提供小于 100 毫秒的输入:
cv2.imshow('lmao', img)
cv2.waitKey(10) # almost always 10 miliseconds is good enough for showing a good image
推荐阅读
- java - mongo 计数查询的性能改进
- spring-boot - 适用于 ecipe 但不适用于本地 tomcat 服务器
- android - Cordova http angularjs 拦截器
- javascript - 将 LI 添加到 UL 顶部(EJS、MONGO、Node[Express])
- sql - 如何在 MS SQL 中将分组记录合并为一行
- c++ - 将 .txt 文件中的数据读入结构
- vue.js - 插件的 globalUIComponent 在构建期间执行 - 如何避免它?
- go - 通过队列发送哨兵追踪
- express - 错误:找不到模块 './models/book' 需要堆栈:
- matlab - 从顶点递归采样三角形?