问题
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.
回答1:
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
回答2:
I think your source path should be:
src_path = "C:/Users/Benji's Beast/Desktop/"
Because in here get_string(src_path + "cont.jpg")
you've concatenated the image name.
回答3:
The problems are this one
src_path = "C:/Users/Benji's Beast/Desktop/image.PNG"
and this one
print(get_string(src_path + "cont.jpg") )
You are appending the image input file name from image.PNG to image.PNG.cont.jpg
If your input image filename is cont.jpg and it is located on your Desktop, then try to replace your code with :
src_path = "C:\Users\Benji's Beast\Desktop\"
and
print(get_string(src_path + "cont.jpg") )
回答4:
if path and image name is verified and correct then just close the jupyter notebook (or whatever platform you are using) and restart it. It worked for me.
来源:https://stackoverflow.com/questions/53926657/215assertion-failed-src-empty-in-function-cvcvtcolor