cv2.error: OpenCV(4.2.0) C:\projects\opencv-python\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

This error happened because the image didn't load properly.
So you have problem with the previous line cv2.imread my suggestion is :

check if the images exist in the path you give

check the count variable if he have valid numberHello Everyone,

I had run into the same problem a few days back. Here's my perspective on why this error came up and how can it be fixed.

The reason behind the error:-
- ```cv2.imread() or cv2.VideoCapture()``` can't find where the file is and hence gives src.empty() since None is returned instead of image or video
- If you are sure that the path specified is correct, then chances are the file being read is corrupted either completely or in a few bits and pieces.

If you got into this problem when working with an image then here is the fix:-
- Change the image, literally. If you don't want to change it then try ```from PIL import Image and``` and see if that works and try to display the image by using matplotlib.
- Changing or reproducing the same image is the best option in my opinion.

If you got into this problem when working with a video then here is the fix:- 
- After using ```cv2.VideoCapture('video path')``` Try something like below example.

suppose this was the source

cap = cv2.VideoCapture('data/input.mpg')

Get width and height of the frame of video

width = cap.get(3) # float width
height = cap.get(4) # float height

Make a video writer to see if video being taken as input inflict any changes you make

fourcc = cv2.VideoWriter_fourcc(*"MJPG")
out_video = cv2.VideoWriter('result/output.avi', fourcc, 20.0, (int(width), int(height)), True)

Then try this

# Read each frame where ret is a return boollean value(True or False)
ret, frame =
# if return is true continue because if it isn't then frame is of NoneType in that case you cant work on that frame
if ret:
# Any preprocessing you want to make on the frame goes here
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# See if preprocessing is working on the frame it should
cv2.imshow('frame', gray)
# finally write your preprocessed frame into your output video
out_video.write(gray) # write the modifies frame into output video
# to forcefully stop the running loop and break out, if it doesnt work use ctlr+c
if cv2.waitKey(1) & 0xFF == ord('q'):
# break out if frame has return NoneType this means that once script encounters such frame it breaks out
# You will get the error otherwise

this will tell you from which frame the video is corrupted and need to be changed

this could be due to an empty frame. Empty frame might be a result of mistake made while creating or editing video in tools #like adobe premier pro or other products alike

You can check you output video it will contains all frame before the error is encountered

I hope this solves your problem and you can better debug your video next time you encounter something similar.