如何在Python中使用cv2显示图像

问题描述 投票:0回答:7

我一直在使用代码来显示电影中的帧。代码的基本框架如下:

import cv2
import matplotlib.pyplot as plt

# Read single frame avi
cap = cv2.VideoCapture('singleFrame.avi')
rval, frame = cap.read()

# Attempt to display using cv2 (doesn't work)
cv2.namedWindow("Input")
cv2.imshow("Input", frame)

#Display image using matplotlib (Works)
b,g,r = cv2.split(frame)
frame_rgb = cv2.merge((r,g,b))
plt.imshow(frame_rgb)
plt.title('Matplotlib') #Give this plot a title, 
                        #so I know it's from matplotlib and not cv2
plt.show()

因为我可以使用 matplotlib 显示图像,所以我知道我已成功读取它。

我不明白为什么我创建的窗口并尝试使用 cv2 显示图像不起作用。不会出现 cv2 窗口。但奇怪的是,如果我创建第二个 cv2 窗口,则会出现“输入”窗口,但它只是一个空白/白色窗口。

我在这里缺少什么?

python opencv matplotlib
7个回答
130
投票

据我所知,你做得几乎不错。缺少一件事:

cv2.imshow('image',img)
cv2.waitKey(0)

所以您的窗口可能会出现,但关闭得非常非常快。


25
投票

您可以按照以下代码

import cv2
# read image 
image = cv2.imread('path to your image')
# show the image, provide window name first
cv2.imshow('image window', image)
# add wait key. window waits until user presses a key
cv2.waitKey(0)
# and finally destroy/close all open windows
cv2.destroyAllWindows()

我想你的工作就完成了


16
投票

由于 OpenCV 读取 BGR 格式的图像,因此在将图像传递给 pyplot 之前,您需要将其转换为 RGB 格式

import cv2
import matplotlib.pyplot as plt

image = cv2.imread('YOUR_FILEPATH')
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(image)
plt.show()

6
投票

使用 Jupyter Notebook 时,这个可能会派上用场

import cv2
import matplotlib.pyplot as plt

# reading image
image = cv2.imread("IMAGE_PATH")

# displaying image
plt.imshow(image)
plt.show()

4
投票
import cv2

image_path='C:/Users/bakti/PycharmProjects/pythonProject1/venv/resized_mejatv.jpg'

img=cv2.imread(image_path)

img_title="meja tv"

cv2.imshow(img_title,img)

cv2.waitKey(0)

cv2.destroyAllWindows()

0
投票

如果您使用 Google Collab,请使用以下两行:

from google.colab.patches import cv2_imshow

cv2_imshow(image)

0
投票

使用 Jupyter Notebook 时,matplotlib 可能无法以全尺寸显示图像。
我发现

display
与PIL Image结合使用效果更好。

import cv2
from PIL import Image

img_bgr = cv2.imread("path/to/image")  # array in BGR format
img_rgb = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)  # BGR -> RGB
img = Image.fromarray(img_rgb)  # convert to PIL image
display(img)
© www.soinside.com 2019 - 2024. All rights reserved.