【问题标题】:TypeError: src is not a numpy array, neither a scalar What is wrong in my code?TypeError: src 不是 numpy 数组,也不是标量 我的代码有什么问题?
【发布时间】:2018-08-10 07:06:09
【问题描述】:

我收到一个错误,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

【问题讨论】:

  • 请粘贴完整的回溯或错误。
  • @UbdusSamad 我已经发布了完整的回溯和错误
  • @UbdusSamad Traceback (most recent call last): File "img.py", line 19, in &lt;module&gt; gray = cv2.cvtColor(images,cv2.COLOR_BGR2GRAY) TypeError: src is not a numpy array, neither a scalar

标签: python numpy opencv


【解决方案1】:

问题出在这里:

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

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

OpenCV 使用 numpy 数组。因此,您需要将该 PIL 图像转换为 numpy 数组。也许是这样的:

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

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

【讨论】:

    【解决方案2】:

    根据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 无法为您加载。

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

    【讨论】:

      猜你喜欢
      • 2018-02-02
      • 2018-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-11
      • 2014-05-30
      • 2020-04-01
      相关资源
      最近更新 更多