如何在Python OpenCV中读取图像

59
我正在尝试在Python OpenCV中读取和显示图像。
执行以下代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('dumb.jpg', cv2.IMREAD_GRAYSCALE)

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

以下是错误的结果:
cv2.error: C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\highgui\src\window.cpp:325: error: (-215) size.width>0 && size.height>0 in function cv::imshow
我该如何解决这个问题?
注意:我已经具备执行所需的所有前提条件(Python 2.7、OpenCV 3.3、Matplotlib 和 NumPy)。
9个回答

46

如果您想使用matplotlib显示OpenCV图像,请使用以下代码。

import numpy as np
import cv2
import matplotlib.pyplot as plt
%matplotlib inline  # if you are running this code in Jupyter notebook

# reads image 'opencv-logo.png' as grayscale
img = cv2.imread('/path_to_image/opencv-logo.png', 0) 
plt.imshow(img, cmap='gray')

22

有一个关于开始使用图片的教程。

import numpy as np
import cv2

# Load an color image in grayscale
img = cv2.imread('/path_to_image/messi5.jpg',0)

# Show the image
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

使用绝对路径来引用图片,这样就不会出现路径问题。
【链接1:绝对路径和相对路径】
【链接2:OpenCV错误:(-215)size.width>0 && size.height>0在函数imshow中】

11

我写了一篇关于使用Python中OpenCV学习图像阅读的简短文章。您可以看到下面的代码片段和说明。

import cv2 #Import openCV
import sys #import Sys. Sys will be used for reading from the command line. We give Image name parameter with extension when we will run python script

#Read the image. The first Command line argument is the image
image = cv2.imread(sys.argv[1]) #The function to read from an image into OpenCv is imread()

#imshow() is the function that displays the image on the screen.
#The first value is the title of the window, the second is the image file we have previously read.
cv2.imshow("OpenCV Image Reading", image)

cv2.waitKey(0) #is required so that the image doesn’t close immediately. It will Wait for a key press before closing the image.

6
要使用OpenCV读取图像,您需要使用以下语法。如果不起作用,则安装可能存在问题。
import cv2

image = cv2.imread('path_of_the_image.png')

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

你没有发布它给出的错误信息。

编辑:我不明白负分是为什么……


cv2.error: C:\build\master_winpack-bindings-win64-vc14-static\opencv\modules\highgui\src\window.cpp:325: error: (-215) size.width>0 && size.height>0 in function cv::imshow - Nagaraj
删除cv2.IMREAD_GRAYSCALE并将正确的路径放入图像中,使用双反斜杠\\\ - lucians

4

出现这个错误的原因是cv2.imread()在查找图像时无法找到该图像。如果您添加了图像的完整路径,例如:

img = cv2.imread('/home/foo/images/dumb.jpg',cv2.IMREAD_GRAYSCALE)

1
这应该是被接受的答案,大多数其他答案只是展示了加载图像的不同方式,并且如果给定的文件路径不正确,它们也会失败。 - ketza

2
import cv2
import matplotlib.pyplot as plt
%matplotlib inline
        
# Hide grid lines
fig, ax = plt.subplots(figsize=(10,10))
ax.grid(False)
    
im=cv2.imread('./my_images.jpg')
plt.imshow(cv2.cvtColor(im, cv2.COLOR_BGR2RGB))
plt.show()

它使用cv2.COLOR_BGR2RGB,因为它将OpenCV的默认设置从BGR格式转换为RGB格式。

0

使用0而不是cv2.IMREAD_GRAYSCALE,我会硬编码文件的位置,而不是像那样引用它,例如如果它在C驱动器上,则放置'C:\\Filename.jpg'


0

看起来你的代码没问题。问题似乎出在参数提供的图像尺寸上。错误代码显示:size> 0 && width> 0。这个条件没有被正确满足。要么维度 sizewidth 小于零。您可以检查任何其他图像并尝试。


-1

试试这个:

import cv2 as cv              #openCV-3.4.1
import numpy as np
import matplotlib.pyplot as plt
img = cv.imread('image path and name .file type ',0)
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

需要解释一下。在这里 - *"总是要解释为什么你提供的解决方案是合适的,以及它是如何工作的"*。 - undefined

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