I am trying to recognize text from an image to then have the text outputted;
however, this error spits out:
Traceback (most recent call last):
File «C:/Users/Benji’s Beast/AppData/Local/Programs/Python/Python37-32/imageDet.py», line 41, in
print(get_string(src_path + «cont.jpg») )
File «C:/Users/Benji’s Beast/AppData/Local/Programs/Python/Python37-32/imageDet.py», line 15, in get_string
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(3.4.4) C:projectsopencv-pythonopencvmodulesimgprocsrccolor.cpp:181: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
The image resolution is 1371×51.
I have tried changing the «/» on src_path to «» but that didn’t work.
Any ideas?
Here is my code:
import cv2
import numpy as np
import pytesseract
from PIL import Image
from pytesseract import image_to_string
# Path of working folder on Disk
src_path = "C:/Users/Benji's Beast/Desktop/image.PNG"
def get_string(img_path):
# Read image with opencv
img = cv2.imread(img_path)
# Convert to gray
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Apply dilation and erosion to remove some noise
kernel = np.ones((1, 1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
# Write image after removed noise
cv2.imwrite(src_path + "removed_noise.png", img)
# Apply threshold to get image with only black and white
#img = cv2.adaptiveThreshold(img, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY, 31, 2)
# Write the image after apply opencv to do some ...
cv2.imwrite(src_path + "thres.png", img)
# Recognize text with tesseract for python
result = pytesseract.image_to_string(Image.open(src_path + "thres.png"))
# Remove template file
#os.remove(temp)
return result
print('--- Start recognize text from image ---')
print(get_string(src_path + "cont.jpg") )
print("------ Done -------")
I have no idea how to fix this,
thanks.
my code:
import cv2
face_cascade = cv2.CascadeClassifier(‘haarcascade_frontalface_default.xml’)
eye_cascade = cv2.CascadeClassifier(‘haarcascade_eye.xml’)
cap = cv2.VideoCapture(0)
while True:
ret, color_img = cap.read() gray_image = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray_image) for (x,y,w,h) in faces : cv2.rectangle(color_img,(x,y) , (x+w,y+h) , (255,0,0), 2) face_gray = gray_image[y:y+h , x:x+w] face_color = color_img[y:y+h , x:x+w] eyes = eye_cascade.detectMultiScale(face_gray) for (ex,ey,ew,eh) in eyes : cv2.rectangle(face_color,(ex,ey),(ex+ew,ey+eh),(0,255,0), 2) cv2.imshow('img',color_img) k = cv2.waitKey(30) & 0xff if k == 113: break cap.release() cv2.destroyAllWindows()
how to fix this error:
error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
ret, color_img = cap.read() gray_image = cv2.cvtColor(color_img, cv2.COLOR_BGR2GRAY) face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(gray_image) for (x,y,w,h) in faces : cv2.rectangle(color_img,(x,y) , (x+w,y+h) , (255,0,0), 2) face_gray = gray_image[y:y+h , x:x+w] face_color = color_img[y:y+h , x:x+w] eyes_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml') eyes = eye_cascade.detectMultiScale(face_gray) for (ex,ey,ew,eh) in eyes : cv2.rectangle(face_color,(ex,ey),(ex+ew,ey+eh),(0,255,0), 2) cv2.imshow('img',color_img) k = cv2.waitKey(30) & 0xff if k == 113: break cap.release() cv2.destroyAllWindows()
This should work
Following an OpenCV tutorial. Followed instructions on https://pypi.org/project/opencv-contr…. The package works great until the tutorial asks to include the following in the script
gray = cv2.cvtColor(color, cv2.COLOR_RGB2GRAY)
Write here how did you expect the library to function.
The tutorial asks to create a script to transform different layers
Following the video it is supposed to split the channels and convert them to grayscale. I’m not 100% sure since I’m new.
Actual behaviour
The following error occurs when running the command:
python3 02_05.py
with pwd showing that I am in the required folder
File «02_05.py», line 6, in <module>
gray = cv2.cvtColor(color,
cv2.COLOR_RGB2GRAY) cv2.error:
OpenCV(4.1.2)
/Users/travis/build/skvark/opencv-python/opencv/modules/imgproc/src/color.cpp:182:
error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’
I don’t have a user called Travis on my computer in case that is not obvious
Steps to reproduce
example code:: This is the full script::
import numpy as np
import cv2
color = cv2.imread("butterfly,jpg",1 )
gray = cv2.cvtColor(color, cv2.COLOR_RGB2GRAY)
cv2.imwrite("gray.jpg", gray)
b = color [:,:, 0]
g = color [:,:, 1]
r = color [:,:, 2]
rgba = cv2.merge((b,g,r, g))
cv2.imwrite("rgba.png", rgba)
` That was the full script
operating system : Mac OSX Mojave 10.14.4
architecture (e.g. x86) : Mac OSX Mojave 10.14.4 (Apple?)
opencv-python version : opencv-contrib-python 4.1.2.30
Thank you.
Hello Guys, How are you all? Hope You all Are Fine. Today I am just trying to read image through cv2 in my code and I am facing following error cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ in python. So Here I am Explain to you all the possible solutions here.
Without wasting your time, Let’s start This Article to Solve This Error.
Contents
- How cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error Occurs ?
- How To Solve cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error ?
- Solution 1: Check Image path
- Solution 2: wrong image location
- Solution 3: Give Full Path
- Summary
I am just trying to read image through cv2 in my code and I am facing following error.
cv2.error: OpenCV(4.5.2) C:UserssscAppDataLocalTemppip-req-build-vi271kacopencvmodulesimgprocsrccolor.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
How To Solve cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error ?
- How To Solve cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error ?
To Solve cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error Please check image path. This error usually occurs when image is not loaded correctly in any way. Second solution is You might given wrong image location. Or esle try to assign diffrent path. Third Solution is I just give full path and that was worked for me.
- cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’
To Solve cv2.error: OpenCV(4.5.2) color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function ‘cv::cvtColor’ Error Please check image path. This error usually occurs when image is not loaded correctly in any way. Second solution is You might given wrong image location. Or esle try to assign diffrent path. Third Solution is I just give full path and that was worked for me.
Solution 1: Check Image path
Please check image path. This error usually occurs when image is not loaded correctly in any way.
Here is how this error occurs.
import cv2
im = cv2.imread("WRONG IMAGE ADDRESS.jpg", 1)
im = cv2.cvtColor(im, cv2.COLOR_RGB2GRAY)
// Now we will face this error.
cv2.error: OpenCV(4.5.2) C:UserssscAppDataLocalTemppip-req-build-vi271kacopencvmodulesimgprocsrccolor.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
Try to giving the image address directly; something like
im = cv2.imread("D:\your_image.jpg", 1)
Solution 2: wrong image location
You might given wrong image location. Or esle try to assign diffrent path.
im = cv2.imread("../images/car.jpg",1)
Solution 3: Give Full Path
I just give full path and that was worked for me.
im = cv2.imread("D:My_ImageCANON80Ddangfvrt.jpg",1)
Summary
It’s all About this issue. Hope all solution helped you a lot. Comment below Your thoughts and your queries. Also, Comment below which solution worked for you?
Also, Read
- XCode doesn’t support iPhone’s iOS 15.0
Each week I receive and respond to at least 2-3 emails and 3-4 blog post comments regarding NoneType
errors in OpenCV and Python.
For beginners, these errors can be hard to diagnose — by definition they aren’t very informative.
Since this question is getting asked so often I decided to dedicate an entire blog post to the topic.
While NoneType
errors can be caused for a nearly unlimited number of reasons, in my experience, both as a computer vision developer and chatting with other programmers here on PyImageSearch, in over 95% of the cases, NoneType
errors in OpenCV are caused by either:
- An invalid image path passed to
cv2.imread
. - A problem reading a frame from a video stream/video file via
cv2.VideoCapture
and the associated.read
method.
To learn more about NoneType
errors in OpenCV (and how to avoid them), just keep reading.
Looking for the source code to this post?
Jump Right To The Downloads Section
In the first part of this blog post I’ll discuss exactly what NoneType
errors are in the Python programming language.
I’ll then discuss the two primary reasons you’ll run into NoneType
errors when using OpenCV and Python together.
Finally, I’ll put together an actual example that not only causes a NoneType
error, but also resolves it as well.
What is a NoneType error?
When using the Python programming language you’ll inevitably run into an error that looks like this:
AttributeError: 'NoneType' object has no attribute ‘something’
Where something
can be replaced by whatever the name of the actual attribute is.
We see these errors when we think we are working with an instance of a particular Class or Object, but in reality we have the Python built-in type None
.
As the name suggests, None
represents the absence of a value, such as when a function call returns an unexpected result or fails entirely.
Here is an example of generating a NoneType
error from the Python shell:
>>> foo = None >>> foo.bar = True Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'NoneType' object has no attribute 'bar' >>>
Here I create a variable named foo
and set it to None
.
I then try to set the bar
attribute of foo
to True
, but since foo
is a NoneType
object, Python will not allow this — hence the error message.
Two reasons for 95% of OpenCV NoneType errors
When using OpenCV and Python bindings, you’re bound to come across NoneType
errors at some point.
In my experience, over 95% of the time these NoneType
errors can be traced back to either an issue with cv2.imread
or cv2.VideoCapture
.
I have provided details for each of the cases below.
Case #1: cv2.imread
If you are receiving a NoneType
error and your code is calling cv2.imread
, then the likely cause of the error is an invalid file path supplied to cv2.imread
.
The cv2.imread
function does not explicitly throw an error message if you give it an invalid file path (i.e., a path to a nonexistent file). Instead, cv2.imread
will simply return None
.
Anytime you try to access an attribute of a None
image loaded from disk via cv2.imread
you’ll get a NoneType
error.
Here is an example of trying to load a nonexistent image from disk:
$ python >>> import cv2 >>> path = "path/to/image/that/does/not/exist.png" >>> image = cv2.imread(path) >>> print(image.shape) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'NoneType' object has no attribute 'shape'
As you can see, cv2.imread
gladly accepts the image path (even though it doesn’t exist), realizes the image path is invalid, and returns None
. This is especially confusing for Python programmers who are used to these types of functions throwing exceptions.
As an added bonus, I’ll also mention the AssertionFailed
exception.
If you try to pass an invalid image (i.e., NoneType
image) into another OpenCV function, Python + OpenCV will complain that the image doesn’t have any width, height, or depth information — and how could it, the “image” is a None
object after all!
Here is an example of an error message you might see when loading a nonexistent image from disk and followed by immediately calling an OpenCV function on it:
>>> import cv2 >>> path = "path/to/image/that/does/not/exist.png" >>> image = cv2.imread(path) >>> gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) OpenCV Error: Assertion failed (scn == 3 || scn == 4) in cvtColor, file /tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp, line 3739 Traceback (most recent call last): File "<stdin>", line 1, in <module> cv2.error: /tmp/opencv20150906-42178-3d0iam/opencv-2.4.12/modules/imgproc/src/color.cpp:3739: error: (-215) scn == 3 || scn == 4 in function cvtColor >>>
These types of errors can be harder to debug since there are many reasons why an AssertionError
could be thrown. But in most cases, your first step should be be ensuring that your image was correctly loaded from disk.
A final, more rare problem you may encounter with cv2.imread
is that your image does exist on disk, but you didn’t compile OpenCV with the given image I/O libraries installed.
For example, let’s say you have a .JPEG file on disk and you knew you had the correct path to it.
You then try to load the JPEG file via cv2.imread
and notice a NoneType
or AssertionError
.
How can this be?
The file exists!
In this case, you likely forgot to compile OpenCV with JPEG file support enabled.
In Debian/Ubuntu systems, this is caused by a lack of libjpeg
being installed.
For macOS systems, you likely forgot to install the jpeg
library via Homebrew.
To resolve this problem, regardless of operating system, you’ll need to re-compile and re-install OpenCV. Please see this page for more details on how to compile and install OpenCV on your particular system.
Case #2: cv2.VideoCapture and .read
Just like we see NoneType
errors and AssertionError
exceptions when using cv2.imread
, you’ll also see these errors when working with video streams/video files as well.
To access a video stream, OpenCV uses the cv2.VideoCapture
which accepts a single argument, either:
- A string representing the path to a video file on disk.
- An integer representing the index of a webcam on your computer.
Working with video streams and video files with OpenCV is more complex than simply loading an image via cv2.imread
, but the same rules apply.
If you try to call the .read
method of an instantiated cv2.VideoCapture
(regardless if it’s a video file or webcam stream) and notice a NoneType
error or AssertionError
, then you likely have a problem with either:
- The path to your input video file (it’s probably incorrect).
- Not having the proper video codecs installed, in which case you’ll need to install the codecs, followed by re-compiling and re-installing OpenCV (see this page for a complete list of tutorials).
- Your webcam not being accessible via OpenCV. This could be for any number of reasons, including missing drivers, an incorrect index passed to
cv2.VideoCapture
, or simply your webcam is not properly attached to your system.
Again, working with video files is more complex than working with simple image files, so make sure you’re systematic in resolving the issue.
First, try to access your webcam via a separate piece of software than OpenCV.
Or, try to load your video file in a movie player.
If both of those work, you likely have a problem with your OpenCV install.
Otherwise, it’s most likely a codec or driver issue.
An example of creating and resolving an OpenCV NoneType error
To demonstrate a NoneType
error in action I decided to create a highly simplified Python + OpenCV script that represents what you might see elsewhere on the PyImageSearch blog.
Open up a new file, name it display_image.py
, and insert the following code:
# import the necessary packages import argparse import cv2 # construct the argument parse and parse the arguments ap = argparse.ArgumentParser() ap.add_argument("-i", "--image", required=True, help="path to the image file") args = vars(ap.parse_args()) # load the image from disk and display the width, height, # and depth image = cv2.imread(args["image"]) (h, w, d) = image.shape print("w: {}, h: {}, d: {}".format(w, h, d)) # show the image cv2.imshow("Image", image) cv2.waitKey(0)
All this script does is:
- Parse command line arguments.
- (Attempts to) load an image from disk.
- Prints the width, height, and depth of the image to the terminal.
- Displays the image to our screen.
For most Python developers who are familiar with the command line, this script won’t give you any trouble.
But if you’re new to the command line and are unfamiliar/uncomfortable with command line arguments, you can easily run into a NoneType
error if you’re not careful.
How, you might say?
The answer lies in not properly using/understanding command line arguments.
Over the past few years of running this blog, I’ve seen many emails and blog post comments from readers who are trying to modify the .add_argument
function to supply the path to their image file.
DON’T DO THIS — you don’t have to change a single line of argument parsing code.
Instead, what you should do is spend the next 10 minutes reading through this excellent article that explains what command line arguments are and how to use them in Python:
This is required reading if you expect to follow tutorials here on the PyImageSearch blog.
Working with the command line, and therefore command line arguments, are a big part of what it means to be a computer scientist — a lack of command line skills is only going to harm you. You’ll thank me later.
Going back to the example, let’s check the contents of my local directory:
$ ls -l total 800 -rw-r--r-- 1 adrianrosebrock staff 541 Dec 21 08:45 display_image.py -rw-r--r-- 1 adrianrosebrock staff 403494 Dec 21 08:45 jemma.png
As we can see, I have two files:
display_image.py
: My Python script that I’ll be executing shortly.jemma.png
: The photo I’ll be loading from disk.
If I execute the following command I’ll see the jemma.png
image displayed to my screen, along with information on the dimensions of the image:
$ python display_image.py --image jemma.png w: 376, h: 500, d: 3
However, let’s try to load an image path that does not exist:
$ python display_image.py --image i_dont_exist.png Traceback (most recent call last): File "display_image.py", line 17, in <module> (h, w, d) = image.shape AttributeError: 'NoneType' object has no attribute 'shape'
Sure enough, there is our NoneType
error.
In this case, it was caused because I did not supply a valid image path to cv2.imread
.
What’s next? I recommend PyImageSearch University.
Course information:
69 total classes • 73 hours of on-demand code walkthrough videos • Last updated: February 2023
★★★★★ 4.84 (128 Ratings) • 15,800+ Students Enrolled
I strongly believe that if you had the right teacher you could master computer vision and deep learning.
Do you think learning computer vision and deep learning has to be time-consuming, overwhelming, and complicated? Or has to involve complex mathematics and equations? Or requires a degree in computer science?
That’s not the case.
All you need to master computer vision and deep learning is for someone to explain things to you in simple, intuitive terms. And that’s exactly what I do. My mission is to change education and how complex Artificial Intelligence topics are taught.
If you’re serious about learning computer vision, your next stop should be PyImageSearch University, the most comprehensive computer vision, deep learning, and OpenCV course online today. Here you’ll learn how to successfully and confidently apply computer vision to your work, research, and projects. Join me in computer vision mastery.
Inside PyImageSearch University you’ll find:
- ✓ 69 courses on essential computer vision, deep learning, and OpenCV topics
- ✓ 69 Certificates of Completion
- ✓ 73 hours of on-demand video
- ✓ Brand new courses released regularly, ensuring you can keep up with state-of-the-art techniques
- ✓ Pre-configured Jupyter Notebooks in Google Colab
- ✓ Run all code examples in your web browser — works on Windows, macOS, and Linux (no dev environment configuration required!)
- ✓ Access to centralized code repos for all 500+ tutorials on PyImageSearch
- ✓ Easy one-click downloads for code, datasets, pre-trained models, etc.
- ✓ Access on mobile, laptop, desktop, etc.
Click here to join PyImageSearch University
Summary
In this blog post I discussed NoneType
errors and AssertionError
exceptions in OpenCV and Python.
In the vast majority of these situations, these errors can be attributed to either the cv2.imread
or cv2.VideoCapture
methods.
Whenever you encounter one of these errors, make sure you can load your image/read your frame before continuing. In over 95% of circumstances, your image/frame was not properly read.
Otherwise, if you are using command line arguments and are unfamiliar with them, there is a chance that you aren’t using them properly. In that case, make sure you educate yourself by reading this tutorial on command line arguments — you’ll thank me later.
Anyway, I hope this tutorial has helped you in your journey to OpenCV mastery!
If you’re just getting started studying computer vision and OpenCV, I would highly encourage you to take a look at my book, Practical Python and OpenCV, which will help you grasp the fundamentals.
Otherwise, make sure you enter your email address in the form below to be notified when future blog posts and tutorials are published!
Download the Source Code and FREE 17-page Resource Guide
Enter your email address below to get a .zip of the code and a FREE 17-page Resource Guide on Computer Vision, OpenCV, and Deep Learning. Inside you’ll find my hand-picked tutorials, books, courses, and libraries to help you master CV and DL!
Would anyone have a tip on how to fix this empty function error in OpenCV? I am attempting to follow the guides on OpenCV.org
The script will detect a face in an image and draw boxes around detections.
import numpy as np
import cv2 as cv
face_cascade = cv.CascadeClassifier('haarcascade_frontalface_alt.xml')
img = cv.imread('images/1.png')
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = img[y:y+h, x:x+w]
cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()
I get an error:
>>>
=== RESTART: C:/Users/Desktop/distance-to-camera/selectHaar2.py ===
Traceback (most recent call last):
File "C:/Users/Desktop/distance-to-camera/selectHaar2.py", line 11, in <module>
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.error: OpenCV(3.4.3) C:projectsopencv-pythonopencvmodulesobjdetectsrccascadedetect.cpp:1698: error: (-215:Assertion failed) !empty() in function 'cv::CascadeClassifier::detectMultiScale'
Help Pls
My code:
<pre>img_file = 'test2.png' img = cv2.imread(img_file, 1) img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) print(f"Loaded {img_file} ({img.shape[1]} x {img.shape[0]})" ) if img.shape[1] > 2000 or img.shape[0] > 2000: print(f"Image too big ({img.shape[1]} x {img.shape[0]})") new_size = 800.0 if img.shape[1] > img.shape[0]: ratio = new_size / img.shape[1] else: ratio = new_size / img.shape[0] print(f"Reducing by factor of {(1./ratio)}" ) print (f"New size: ({img.shape[1]} x {img.shape[0]})") plt.imshow(np.asarray(img))
Error Message:
error: OpenCV(4.5.3) C:UsersrunneradminAppDataLocalTemppip-req-build-sn_xpupmopencvmodulesimgprocsrccolor.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'
Traceback:
<pre>--------------------------------------------------------------------------- error Traceback (most recent call last) ~AppDataLocalTemp/ipykernel_7268/4163631807.py in <module> 2 3 img = cv2.imread(img_file, 1) ----> 4 img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) 5 print(f"Loaded {img_file} ({img.shape[1]} x {img.shape[0]})" ) 6
What I have tried:
img = cv2.imread(img_file, 1)
i changed it with below code it didn’t work
img = cv2.imread(img_file)
Updated 22-Nov-21 19:14pm
Hi,
That is because it cannot find the img_file
img = cv2.imread(img_file)
so, write in the full path for the img_file name,
maybe the problem will be solve.
This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)
CodeProject,
20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8
+1 (416) 849-8900