【问题标题】:How to resize video stream from cv2 according to tkinter window如何根据 tkinter 窗口从 cv2 调整视频流的大小
【发布时间】:2021-07-25 23:34:09
【问题描述】:

这是一个代码,我只想在 Tkinter 标签上显示来自摄像机的流。现在的问题是当有人试图调整 Tkinter 窗口的大小时,流应该相应地调整大小,保持相同的纵横比。我尝试了一些调整,但没有成功。下面是我的代码。

root.bind( "<Configure>", resize )

width = cap. get(cv2. CAP_PROP_FRAME_WIDTH )
height = cap. get(cv2. CAP_PROP_FRAME_HEIGHT )
k = int(compute_hcf(int(width),int(height)))
w_ratio = width//k
h_ratio = height//k

def resize(event):
    h = root.winfo_height()
    w = root.winfo_width()
    k = min(h,w)
    print(k)
    cap.set(cv2.CAP_PROP_FRAME_WIDTH, k//w_ratio)
    cap.set(cv2.CAP_PROP_FRAME_HEIGHT, k//h_ratio)

这给我在尝试调整窗口大小时出现以下错误。

[WARN:0] 全局 C:\projects\opencv-python\opencv\modules\videoio\src\cap_msmf.cpp (436) `anonymous-namespace'::SourceReaderCB::~SourceReaderCB 终止异步回调

如果有人可以帮忙,谢谢。

【问题讨论】:

    标签: python tkinter tk cv2


    【解决方案1】:

    因此,在阅读了您的代码之后,您似乎通过尝试创建一个为您调整其大小的事件来使问题过于复杂。

    所以我回到了基础,刚刚创建了一个网络摄像头流,它会在您调整窗口大小时调整大小,同时保持纵横比。

    这是我找到并修改的一些代码,它没有使用tkinter,但这并不重要,因为您可以将其合并到任何您认为合适的地方。

    我唯一遇到的主要问题是,在调整大小时,您可能会发现窗口会冻结,但只有几秒钟,它会在一段时间后恢复,您实际上不会冻结图像,只是窗口控制。

    您可能需要使用python multithreading,实际上我今晚可能会尝试这样做,因为我觉得这很有趣。

    import cv2
    
    def main():
    
        windowName = "Top"
        cv2.namedWindow(windowName)
        cap = cv2.VideoCapture(0)
    
        cap.set(3, 650)
        cap.set(4, 750)
        
        if cap.isOpened():
            ret, frame = cap.read()
        else:
            ret = False
    
        while ret:
            ret, frame = cap.read()
            cv2.imshow(windowName, frame)
            if cv2.waitKey(1) == 27:
                break
    
        cv2.destroyAllWindow()
    
        cap.release()   
    if __name__== "__main__":
    
        main() 
    

    但就实际功能而言,这将让您流式传输相机并调整窗口大小而不会裁剪,保持相同的纵横比。

    如果您有任何问题,请告诉我

    【讨论】:

    • 你好 Giuseppe 这是完整的代码:codeshare.io/5gnY6B
    • 我已经查看了代码,其中有很多内容看起来很不合适,但是今天晚上下班后,我会为您修复它并更新我的答案,如果没有其他人在此期间。
    • @saikat 我已经更新了我的评论,如果有帮助请告诉我
    猜你喜欢
    • 1970-01-01
    • 2023-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-12-12
    • 2016-05-22
    • 2020-07-12
    • 1970-01-01
    • 2014-12-28
    相关资源
    最近更新 更多