You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在cv2.imshow的窗口标题中正确显示中文?

Windows下OpenCV imshow中文窗口标题乱码解决办法

问题根源

Windows平台中,OpenCV的cv2.imshow()窗口标题默认采用GBK编码处理,而Python 3的字符串默认是UTF-8编码,编码不匹配导致中文标题乱码。

可行解决方案

方案一:调用Windows API直接设置窗口标题

通过ctypes调用Windows系统API,直接修改已创建窗口的标题,避开OpenCV的编码问题,稳定性更高。

修改后的完整代码:

import cv2
import ctypes

# 加载Windows用户态API库,获取设置窗口标题的函数
user32 = ctypes.WinDLL('user32', use_last_error=True)
SetWindowTextW = user32.SetWindowTextW
SetWindowTextW.argtypes = [ctypes.c_void_p, ctypes.c_wchar_p]

cap = cv2.VideoCapture(0)
# 先创建临时窗口(用英文标题避免乱码)
ret, frame = cap.read()
cv2.imshow('temp_win', frame)
# 获取窗口句柄
window_handle = cv2.getWindowHandle('temp_win')
# 设置中文标题
SetWindowTextW(window_handle, '摄像头画面')

while True:
    ret, frame = cap.read()
    if not ret:
        break
    cv2.imshow('temp_win', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

方案二:编码转换适配OpenCV的GBK要求

将中文标题转换为GBK编码的字节流,再通过单字节编码解码为字符串,让OpenCV能正确解析中文。

修改后的完整代码:

import cv2

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    if not ret:
        break
    # 编码转换:UTF-8中文转GBK字节,再用iso-8859-1解码为字符串
    chinese_title = '中文'.encode('gbk').decode('iso-8859-1')
    cv2.imshow(chinese_title, frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

说明

  • 方案一通过系统API直接操作窗口,不受OpenCV版本或Python编码设置影响,推荐使用。
  • 方案二依赖编码转换,若系统默认编码不是GBK(极少情况)可能失效,但代码更简洁。

内容的提问来源于stack exchange,提问作者郑远程

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:27:31