打开cv错误:(-215)scn == 3 || scn == 4在函数cvtColor

我目前在Ubuntu 14.04,使用python 2.7和cv2。

当我运行这个代码:

import numpy as np import cv2 img = cv2.imread('2015-05-27-191152.jpg',0) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

它返回:

  File "face_detection.py", line 11, in <module> gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) cv2.error: /home/arthurckl/Desktop/opencv-3.0.0-rc1/modules/imgproc/src/color.cpp:7564: error: (-215) scn == 3 || scn == 4 in function cvtColor 

我已经在这里search,一个答案说,我可以加载我的照片错误的方式,因为它应该有三个维度:行,列和深度。

当我打印img.shape它只返回两个数字,所以我一定是做错了。 但我不知道正确的方式来加载我的照片。

用正斜杠给出图像的完整path。 它解决了我的错误。

例如

 import numpy as np import cv2 img = cv2.imread('C:/Python34http://img.dovov.com2015-05-27-191152.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

另外,如果在使用cv2.imread加载图像时给第二个参数cv2.imread 0 ,而不需要使用cvtColor转换图像,则它已经加载为灰度图像,例如。

 import numpy as np import cv2 gray = cv2.imread('C:/Python34http://img.dovov.com2015-05-27-191152.jpg',0) 

请设置如下

 img = cv2.imread('2015-05-27-191152.jpg',1) // Change Flag As 1 For Color Image //or O for Gray Image So It image is //already gray 

只传图像的名字,不需要0

 img=cv2.imread('sample.jpg') 
 img = cv2.imread('2015-05-27-191152.jpg',0) 

上面的代码行在灰度颜色模型中读取您的图像,因为在最后附加了0。 如果您再次尝试将已经是灰色的图像转换为灰色图像,则会显示该错误。

所以要么使用上面的风格,要么尝试下面的代码:

 img = cv2.imread('2015-05-27-191152.jpg') gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 

首先应该检查的是,图像是否存在于根目录中。 这主要是由于高度= 0的图像。这意味着cv2.imread(imageName)不读取图像。

这是我用.jpg格式使用我自己的图像集时所观察到的。 在Opencv文档中提供的示例脚本中,请注意它具有undistortcrop the image线,如下所示:

 # undistort dst = cv2.undistort(img, mtx, dist, None, newcameramtx) # crop the image x,y,w,h = roi dst = dst[y:y+h, x:x+w] cv2.imwrite('calibresult.jpg',dst) 

所以,当我们第一次运行代码的时候,它会执行cv2.imwrite('calibresult.jpg',dst)这个命令,在当前目录下保存一个图像cv2.imwrite('calibresult.jpg',dst) 。 所以,当我下次运行这个代码的时候,还有我用jpg格式来校准摄像头的样本图像集,代码也试图考虑这个新添加的图像calibresult.jpg ,因此出现错误

 error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\imgproc\src\color.cpp:7456: error: (-215) scn == 3 || scn == 4 in function cv::ipp_cvtColor 

我所做的是:我只是在每次运行后删除新生成的图像,或者改变图像的types来表示pngtifftypes。 这解决了这个问题。 检查你是否正在input和写入相同types的calibresult 。 如果是这样,只要改变types。

我想这是因为cv2.imread不能读取.jpg图片,您需要将.jpg改为.pgn,ma

尝试在第11行,为我工作。我想你是缺less函数detectMultiScale()的参数

 faces = face_cascade.detectMultiScale(gray, 1.3, 5)