将灰度图像放入一个列表 - (错误:(-215)scn == 3 || scn == 4 in function ipp_cvtColor)

时间:2017-04-29 17:36:42

标签: python opencv3.1

我想将文件夹中的每个图像读入一个列表,然后对每个图像进行灰度。所有灰度图像也应该在一个列表中。目前,我能够将图像读取到一个列表,但我无法将所有灰度图像放入一个列表中。

这是我的代码:

import cv2
import numpy as np
from os import listdir
from os.path import isfile, join

mypath = 'jpl_thomas' 
onlyfiles = [f for f in listdir(mypath) if isfile(join(mypath,f)) ] 

images = np.empty(len(onlyfiles), dtype=object) 
for n in range(0, len(onlyfiles)):  
    images[n] =cv2.imread(join(mypath,onlyfiles[n]))

frames = np.zeros(len(images)) 
for i in range(0, len(images)):
    frames[i] = cv2.cvtColor(images[i],cv2.COLOR_BGR2GRAY)

我得到的错误如下:

File "main.python", line 21, in <module>
    frames[i] = cv2.cvtColor(images[i],cv2.COLOR_BGR2GRAY) 
    cv2.error: /Users/jenkins/miniconda/1/x64/conda-bld/conda_1486588158526/work/opencv-3.1.0/modules/imgproc/src/color.cpp:7456: 
    error: (-215) scn == 3 || scn == 4 in function ipp_cvtColor

我试图调试小部件。 frames[0] = cv2.cvtColor(images[0],cv2.COLOR_BGR2GRAY)返回正确的值。但如果我使用for循环,则会发生上述错误。

1 个答案:

答案 0 :(得分:1)

以下代码读取mypath中的所有彩色图像文件,并同时将它们转换为灰度图像。 color_images[]gray_images[]是保存彩色和灰色图像的两个list

from os import listdir
from os.path import isfile, join
import numpy as np
import cv2

mypath = './imageFiles/' 
onlyfiles = [fname for fname in listdir(mypath) if isfile(join(mypath,fname))] 

color_images = np.empty(len(onlyfiles), dtype=object)
gray_images = np.empty(len(onlyfiles), dtype=object)

for n in range(0, len(onlyfiles)):  
    color_images[n] =cv2.imread(join(mypath,onlyfiles[n]))
    gray_images[n] =cv2.imread(join(mypath,onlyfiles[n]),0)

# plot images in list[] for checking
for i in range(len(color_images)):
    plt.figure(i)
    plt.subplot(121), plt.imshow(color_images[i][:,:,::-1]), plt.title('color') 
    plt.subplot(122), plt.imshow(gray_images[i], cmap='gray'), plt.title('grayscale')
plt.show()

下面的示例图是放入_images[]的图像文件,其中包含{{1}下着名的“Lena”“Scenetext”图像文件}}

read an image

请注意mypath

  1. 彩色图片存储在OpenCV numpy
  2. 灰度图像只有一个频道(height[0:n], width[0:m], channels[B,G,R])
  3. (height[0:n], width[:0:m])将彩色图像转换为灰度 cv2.imread(filename[,flags])设置为flags。有关更多标记,请参阅“{{3}}”。
  4. 希望得到这个帮助。