Of course! The term namedWindow in Python almost exclusively refers to a function from the OpenCV library, which is the standard for computer vision tasks.

Let's break it down completely.
What is cv2.namedWindow()?
In simple terms, cv2.namedWindow() is a function that creates an empty window on your screen with a specific name. You use this window to display images or video frames later using other OpenCV functions like cv2.imshow().
Think of it as reserving a blank picture frame on your wall. You haven't put a picture in it yet, but you've given it a name so you know which frame to use later.
The Basic Syntax
The function is part of the cv2 module, so you call it like this:

cv2.namedWindow(window_name, flags)
Parameters:
-
window_name(string):- This is the most important parameter. It's the unique name you give to your window.
- You will use this exact same name when you want to display an image in it using
cv2.imshow(). - Example:
"My Image Window","Video Feed","Controls"
-
flags(integer, optional):- This parameter controls the window's behavior and appearance. If you don't provide it, it defaults to
cv2.WINDOW_AUTOSIZE. - Here are the most common flags:
- This parameter controls the window's behavior and appearance. If you don't provide it, it defaults to
| Flag Constant | Value | Description |
|---|---|---|
cv2.WINDOW_NORMAL |
0 |
The window is resizable and can be minimized. You can also change its size using cv2.resizeWindow(). |
cv2.WINDOW_AUTOSIZE |
1 |
(Default) The window size is automatically adjusted to fit the image. You cannot resize it manually. The image will be displayed at its original resolution. |
cv2.WINDOW_FULLSCREEN |
2 |
The window will be created in fullscreen mode. |
cv2.WINDOW_OPENGL |
4 |
Creates a window with OpenGL support. (More advanced) |
Code Examples
Let's see it in action with a few common scenarios.
Example 1: Basic Usage (Default Behavior)
This example creates a window and displays an image in it. The window will automatically size itself to fit the image.

import cv2
import numpy as np
# 1. Create a simple black image
# An image is a NumPy array. Shape: (height, width, channels)
# Here, we create a 300x300 black image with 3 color channels (BGR)
image = np.zeros((300, 300, 3), dtype="uint8")
# 2. Create a window named 'My Image'
# We are not providing the 'flags' parameter, so it defaults to WINDOW_AUTOSIZE
cv2.namedWindow('My Image')
# 3. Display the image in the named window
cv2.imshow('My Image', image)
# 4. Wait for a key press to close the window
# cv2.waitKey(0) will pause the script until any key is pressed.
cv2.waitKey(0)
# 5. Clean up: close all OpenCV windows
cv2.destroyAllWindows()
Example 2: Resizable Window (WINDOW_NORMAL)
This is very useful when you want to view large images or videos without them taking up the entire screen.
import cv2
# Load an image (replace 'path/to/your/image.jpg' with an actual image path)
try:
image = cv2.imread('path/to/your/image.jpg')
# Check if the image was loaded successfully
if image is None:
raise FileNotFoundError("Could not read the image. Check the path.")
# Create a window that can be manually resized
cv2.namedWindow('Resizable Image', cv2.WINDOW_NORMAL)
# Display the image
cv2.imshow('Resizable Image', image)
# You can even resize the window programmatically
# cv2.resizeWindow('Resizable Image', 600, 400)
print("Press any key to close the window.")
cv2.waitKey(0)
cv2.destroyAllWindows()
except FileNotFoundError as e:
print(e)
Example 3: Practical Use Case - Displaying a Video
When displaying a video, you typically create the window once before the loop and then repeatedly show new frames inside it.
import cv2
# Replace 'path/to/your/video.mp4' with a video file path
video_path = 'path/to/your/video.mp4'
# Create a video capture object
cap = cv2.VideoCapture(video_path)
# Check if the video was opened successfully
if not cap.isOpened():
print("Error: Could not open video.")
exit()
# Create a window for the video feed
# Using WINDOW_NORMAL is good for videos so the user can resize the window
cv2.namedWindow('Video Feed', cv2.WINDOW_NORMAL)
print("Press 'q' to quit the video.")
# Loop to read and display frames
while True:
# Read a frame from the video
# ret is a boolean (True if a frame was read successfully)
# frame is the image itself
ret, frame = cap.read()
# If the frame was not read, it means we've reached the end of the video
if not ret:
print("End of video.")
break
# Display the frame in the 'Video Feed' window
cv2.imshow('Video Feed', frame)
# Wait for 25 milliseconds for a key press
# If the key pressed is 'q', break the loop
if cv2.waitKey(25) & 0xFF == ord('q'):
break
# Release the video capture object and close all windows
cap.release()
cv2.destroyAllWindows()
Why Use namedWindow? Can't I Just Use imshow?
You can! And in many simple scripts, you'll see people just use cv2.imshow() directly.
# This works perfectly fine!
cv2.imshow('Simple Window', image)
cv2.waitKey(0)
So, when should you explicitly use cv2.namedWindow()?
- To Control Window Properties: You need to set a flag like
cv2.WINDOW_NORMALto make the window resizable before you display anything in it. - To Create an Empty Window: Sometimes you want to create a window first and decide what to show in it later in your program's logic.
- For GUI Controls: If you plan to add trackbars (sliders) to your window using
cv2.createTrackbar(), the trackbars must be associated with a pre-existing named window.
Important Related Functions
To fully understand namedWindow, you should know about its companions:
cv2.imshow(window_name, image): Displays an image or video frame inside a window. The window must have been created first (either bynamedWindowor by a previousimshowcall).cv2.waitKey(delay): Waits for a specified number of milliseconds for a key event. It's essential for any script that usesimshow. If you don't use it, your windows will appear and disappear instantly. Adelayof0means it waits indefinitely.cv2.destroyAllWindows(): Closes all windows created by OpenCV. It's good practice to call this at the end of your script to free up resources.cv2.destroyWindow(window_name): Closes a single, specific window.
Summary
| Function | Purpose |
|---|---|
cv2.namedWindow() |
Creates an empty, named window. Use it to set window properties like WINDOW_NORMAL before displaying content. |
cv2.imshow() |
Displays an image/video frame in a window. Can create the window on-the-fly if it doesn't exist. |
cv2.waitKey() |
Pauses execution and listens for keyboard input. Required to see windows. |
cv2.destroyAllWindows() |
Closes all OpenCV windows. Good for cleanup. |
