Using cv2.imread: "<built-in function imread> returned NULL without setting an error", as if it can't open the picture or get the data

anoold picture anoold · Sep 26, 2019 · Viewed 24.6k times · Source

This is the part of my code that gives the problem. It is supposed to count the amount of green pixels in a picture:

img = Image.open('path.tif')

BLACK_MIN = np.array([0, 20, 20], np.uint8)

BLACK_MAX = np.array([120, 255, 255], np.uint8)

imgg = cv2.imread(img, 1)

dst = cv2.inRange(imgg, BLACK_MIN, BLACK_MAX)

no_black = cv2.countNonZero(dst)

print('The number of black pixels is: ' + str(no_black))

Answer

Blue Three Wheeler picture Blue Three Wheeler · Sep 26, 2019

You are passing a PIL image to imread but it expects a filepath (https://docs.opencv.org/2.4/modules/highgui/doc/reading_and_writing_images_and_video.html?highlight=imread#Mat%20imread(const%20string&%20filename,%20int%20flags)

You should use:

imgg = cv2.imread('path.tif', 1)