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

69

我一直在编写代码来显示电影中的帧。以下是代码的基本结构:

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窗口,则“输入”窗口将出现,但它只是一个空白/白色窗口。 我在这里错过了什么?

3
你有没有阅读文档?在 cv2.imshow 后尝试使用 cv2.waitKey(0) - M4rtini
6个回答

130

就我所见,你做得几乎很好。有一件事情还缺失:

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

所以你的窗口可能会出现,但会非常快速地关闭。


23

您可以按照下面的代码进行操作

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()

我认为你的工作已经完成了


这是正确的方法。如果使用笔记本电脑,接受的方法有时可能会导致您的Jupyter内核崩溃。 - pebox11

15

由于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()

这不是作者所询问的内容。您正在展示如何在matplotlib中显示图片,而问题是关于cv2的。 - stodi
如果您有新的问题,请通过单击提问按钮来提出。如果它有助于提供上下文,请包含此问题的链接。- 来自审核 - AfterFray
4
虽然与问题不直接相关,但这对我解决另一个错误非常有用。 - knowledge_seeker
1
对于像“这不是作者所要求的”这样的评论,提供替代解决方案会增加价值。没有必要过于严格地拒绝像这样有价值的答案。 - mon

6

在使用Jupyter Notebook时,这可能会很有用。

import cv2
import matplotlib.pyplot as plt

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

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

1
应该删除 "Image"。第一个参数只接受类似数组的值或 PIL 图像。 - Sidnetopia

3
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()

你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心找到有关如何编写良好答案的更多信息。 - Community

0
如果您正在使用Google Collab,则请使用以下两行代码:
from google.colab.patches import cv2_imshow

cv2_imshow(image)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接