4

I got an error,TypeError: src is not a numpy array, neither a scalar.

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 

. I wrote in 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()

I searched this error, and i found this question exceptions.TypeError: src is not a numpy array, neither a scalar ,but I already use cv2.COLOR_BGR2GRAY in cvtColor method so I really cannot understand why this error happens.And I really cannot understand the meaning of src. What is wrong in my code?How should I fix this? I referenced this opencv document https://docs.opencv.org/3.4.0/d9/df8/tutorial_root.html .

3
  • Paste the complete traceback or the error, please. Commented Mar 2, 2018 at 4:35
  • @UbdusSamad I already posted full traceback and error Commented Mar 2, 2018 at 4:51
  • @UbdusSamad 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 Commented Mar 2, 2018 at 4:51

3 Answers 3

11

The problem is here:

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

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

OpenCV uses numpy arrays. So you'd need to convert that PIL image to a numpy array. Perhaps something like this:

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

gray = cv2.cvtColor(images,cv2.COLOR_BGR2GRAY)
Sign up to request clarification or add additional context in comments.

Comments

2

According to cv2 documentation:

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

That means images in your code is not the required kind of thing.

And from 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().

Apparently you have opened the file, but loaded the image. And cv2 can't load it for you.

Note that I'm working from documentation that I can find on line; I don't have first hand experience with these modules. Do you have documentation or examples that indicate that this code should work?

Comments

0

You can try these steps in order:

  • Convert PIL image to numpy array manually as mentioned already
  • Ensure the File Type and Shape you're working with is correct. You may need to convert RGB type to RGBA type or vice versa
  • Ensure the image you're working with is Contiguous in Memory:
image = np.ascontiguousarray(image)
  • Lastly, you can reinstall numpy. This is the only step that worked for me when I had the exact same error

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.