TypeError:src不是一个numpy数组,也不是标量我的代码有什么问题?

问题描述 投票:0回答:2

我收到一个错误,TypeError:src不是一个numpy数组,也不是标量。

Traceback says 
Traceback (most recent call last):
  File "img.py", line 19, in <module>
    gray = cv2.cvtColor(images,cv2.COLOR_BGR2GRAY)
TypeError: src is not a numpy array, neither a scalar 

。我在img.py中写道

import numpy as np
import cv2
import glob
from PIL import Image

# termination criteria
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 30, 0.001)

# prepare object points, like (0,0,0), (1,0,0), (2,0,0) ....,(6,5,0)
objp = np.zeros((6*7,3), np.float32)
objp[:,:2] = np.mgrid[0:7,0:6].T.reshape(-1,2)

# Arrays to store object points and image points from all the images.
objpoints = [] # 3d point in real world space
imgpoints = [] # 2d points in image plane.

images = Image.open('photo.jpg')

gray = cv2.cvtColor(images,cv2.COLOR_BGR2GRAY)

# Find the chess board corners
ret, corners = cv2.findChessboardCorners(gray, (7,6),None)

# If found, add object points, image points (after refining them)
if ret == True:
   objpoints.append(objp)

   corners2 = cv2.cornerSubPix(gray,corners,(11,11),(-1,-1),criteria)
   imgpoints.append(corners2)

   # Draw and display the corners
   img = cv2.drawChessboardCorners(img, (7,6), corners2,ret)
   cv2.imshow('img',img)
   cv2.waitKey(500)

cv2.destroyAllWindows()

我搜索了这个错误,我发现这个问题exceptions.TypeError: src is not a numpy array, neither a scalar,但我已经在cvtColor方法中使用了cv2.COLOR_BGR2GRAY所以我真的无法理解为什么会发生这种错误。而且我真的无法理解src的含义。我的代码有什么问题?我应该如何解决这个问题?我引用了这个opencv文档https://docs.opencv.org/3.4.0/d9/df8/tutorial_root.html

python numpy opencv
2个回答
0
投票

根据cv2文件:

Python: cv.CvtColor(src, dst, code) → None
Parameters: 
src – input image: 8-bit unsigned, 16-bit unsigned ( CV_16UC... ), 
   or single-precision floating-point.

这意味着你的代码中的images不是必需的东西。

来自PIL:

PIL.Image.open(fp, mode='r')
Opens and identifies the given image file.

This is a lazy operation; this function identifies the file, 
but the file remains open and the actual image data is not read from the file 
until you try to process the data (or call the load() method). See new().

显然您已打开文件,但加载了图像。并且cv2无法为您加载它。

请注意,我正在使用我可以在线查找的文档;我没有这些模块的第一手经验。您是否有文档或示例表明此代码应该有效?

© www.soinside.com 2019 - 2024. All rights reserved.