首页 > 解决方案 > 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)

标签: pythonopencvmatplotlib

解决方案


您必须设置与传感器帧速率兼容的 waitKey 输入值。例如,如果您每 100 毫秒获取一次新图像,则应为 waitKey 提供小于 100 毫秒的输入:

cv2.imshow('lmao', img)
cv2.waitKey(10) # almost always 10 miliseconds is good enough for showing a good image

推荐阅读