Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

(-215:Assertion failed) !_src.empty() in function 'cv::cvtColor' with cv::imread

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:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

The image resolution is 1371x51. 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.

like image 495
Benji Avatar asked Dec 26 '18 01:12

Benji


People also ask

How do I fix cv2 error?

importerror no module named cv2 error occurs when cv2 module is not properly installed or its path is not properly set or configured. The straight way fix for this error (no module named cv2) is to reinstall this module (OpenCV-python). In some scenario reinstalling this module automatically remove the older version.

What is a cv2 error?

The Python "ModuleNotFoundError: No module named 'cv2'" occurs when we forget to install the opencv-python module before importing it or install it in an incorrect environment. To solve the error, install the module by running the pip install opencv-python command.

What is cvtColor in OpenCV?

The cvtColor() function in OpenCV takes two parameters namely image and code where the image is the image whose color space is to be converted to different color space and the code represents the color conversion code. There are more than 150 color space conversion codes available in OpenCV.

What is the purpose of cv2 cvtColor () function?

cv2. cvtColor() method is used to convert an image from one color space to another. There are more than 150 color-space conversion methods available in OpenCV.


2 Answers

This means you are passing a Uninitialized variable to

> cv2.cvtColor()

After this statement:

# Read image with opencv
img = cv2.imread(img_path)

Can you try to print the img variable before passing to cv2.cvtColor() function

> print(img) or print(img.shape)

to make sure function call to read the image is successful

like image 167
rahul4data Avatar answered Sep 20 '22 17:09

rahul4data


Error: !_src.empty() in function 'cv::cvtColor means the object passed to function cvtColor is empty or say none. Here, in the following line img is none

cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

and img is result of following function -

img = cv2.imread(img_path)

The possible reasons, why img can be empty object are -

  1. The image path is not correct, try absolute path and check image file extension.
  2. The image file is not accessible. There could be permission issue.

To avoid this error check if img object is None, if it is not none then only pass it to cvtColor function.

img = cv2.imread(img_path)
if(img is not None):
    cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
like image 38
Namrata Avatar answered Sep 22 '22 17:09

Namrata