打开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文档中提供的示例脚本中,请注意它具有undistort
并crop 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来表示png
或tiff
types。 这解决了这个问题。 检查你是否正在input和写入相同types的calibresult
。 如果是这样,只要改变types。
我想这是因为cv2.imread不能读取.jpg图片,您需要将.jpg改为.pgn,ma
尝试在第11行,为我工作。我想你是缺less函数detectMultiScale()的参数
faces = face_cascade.detectMultiScale(gray, 1.3, 5)