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

如何使用OpenCV去除cv2.imshow()窗口的标题栏?

解决cv2.imshow()窗口去除标题栏的有效方法

由于OpenCV的cv2.imshow()本身没有原生的无标题栏窗口API,旧方案失效通常是因为OpenCV后端更新或平台差异。以下是分平台的有效解决方法:

方法1:OpenCV原生属性尝试(跨平台基础方案)

先通过cv2.namedWindow()创建窗口,再尝试设置无装饰属性(仅部分后端如Qt支持):

# 在调用imshow前提前创建窗口
cv2.namedWindow("Original Image", cv2.WINDOW_NORMAL)
# 尝试设置窗口为无装饰模式(部分平台生效)
cv2.setWindowProperty("Original Image", cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

如果全屏不符合需求,可结合窗口大小设置后,再用系统级API隐藏标题栏。

方法2:Windows平台专用方案(pywin32实现)

通过Windows系统API直接修改窗口样式,移除标题栏和控制按钮:

首先安装依赖:

pip install pywin32

修改后的完整代码:

import numpy as np
import cv2
import pickle
import win32gui
import win32con

width = 640
height = 480
threshold =0.0
maxProb = 0
resultClass = ""

cam = cv2.VideoCapture(0)
cam.set(3,width)
cam.set(4,height)

pickle_in = open("model_trained.101sgd","rb")
model = pickle.load(pickle_in)

def PreProcessing(img):
    img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    img = cv2.equalizeHist(img)
    img = img/255 
    return img

# 定义移除标题栏的函数
def remove_title_bar(window_name):
    hwnd = win32gui.FindWindow(None, window_name)
    if hwnd:
        # 移除标题栏、最大化/最小化/关闭按钮
        style = win32gui.GetWindowLong(hwnd, win32con.GWL_STYLE)
        style = style & ~win32con.WS_CAPTION & ~win32con.WS_THICKFRAME & ~win32con.WS_MINIMIZEBOX & ~win32con.WS_MAXIMIZEBOX & ~win32con.WS_SYSMENU
        win32gui.SetWindowLong(hwnd, win32con.GWL_STYLE, style)
        # 调整窗口位置和大小(避免偏移)
        win32gui.SetWindowPos(hwnd, win32con.HWND_TOP, 100, 100, width, height, win32con.SWP_FRAMECHANGED)

# 提前创建窗口
cv2.namedWindow("Original Image", cv2.WINDOW_NORMAL)
cv2.namedWindow("Processed Image", cv2.WINDOW_NORMAL)

while True:
    success, imgOriginal = cam.read()
    img = np.asarray(imgOriginal)

    img = cv2.resize(img,(32,32))
    img = PreProcessing(img)
    cv2.imshow("Processed Image",img)
    remove_title_bar("Processed Image")
    
    img = img.reshape(1,32,32,1)

    classIndex = int(model.predict_classes(img))
    predictions = model.predict(img)
    probVal  = np.amax(predictions)

    if probVal >threshold:
        cv2.putText(imgOriginal,str(classIndex) + " " +str(probVal),(50,50),cv2.FONT_HERSHEY_COMPLEX,
                1,(0,0,255),1 )
    
    cv2.imshow("Original Image", imgOriginal)
    remove_title_bar("Original Image")

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cam.release()
cv2.destroyAllWindows()

方法3:Linux平台专用方案(Xlib实现)

通过X11 API修改窗口属性,移除装饰:

首先安装依赖:

pip install python-xlib

添加移除标题栏的函数:

import Xlib.display
import Xlib.X

def remove_title_bar(window_name):
    display = Xlib.display.Display()
    root = display.screen().root
    # 查找目标窗口
    target_hwnd = None
    for win in root.query_tree().children:
        try:
            if win.get_wm_name() == window_name:
                target_hwnd = win
                break
        except:
            pass
    if target_hwnd:
        # 发送消息通知窗口管理器移除装饰
        protocol = display.intern_atom("_MOTIF_WM_HINTS")
        hints = Xlib.X.StructureNotifyEvent()
        hints.type = Xlib.X.ClientMessage
        hints.window = target_hwnd
        hints.message_type = protocol
        hints.format = 32
        hints.data.l = [2, 0, 0, 0, 0]
        target_hwnd.send_event(hints, event_mask=Xlib.X.NoEventMask)
        display.flush()

在cv2.imshow()之后调用该函数即可。

方法4:macOS平台专用方案(Quartz实现)

通过macOS的Quartz API修改窗口样式:

首先安装依赖:

pip install pyobjc-framework-Quartz

添加移除标题栏的函数:

import Quartz
from AppKit import NSApplication

def remove_title_bar(window_name):
    app = NSApplication.sharedApplication()
    for win in app.windows():
        if win.title() == window_name:
            # 移除标题栏样式
            win.setStyleMask_(win.styleMask() & ~Quartz.NSTitledWindowMask)
            break

同样在cv2.imshow()之后调用该函数。

注意事项

  • 必须在cv2.imshow()之后调用移除标题栏的函数,确保窗口已创建。
  • 窗口名称要与cv2.imshow()的窗口名完全匹配。
  • 虚拟环境中安装依赖时,需确保包安装在对应环境内。

内容的提问来源于stack exchange,提问作者Bhetrand Dwilangga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:45:33