I've created a list which is called tools_list. That list contain all the existing .png photos from tools directory. The problem that I have is regarding to images_list.In images_list I want to store all the images and at the same time apply cv.imread to them. When I tried to run my I got
- check file path/integrity
- TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType'
mp_hands = mp.solutions.hands
tools_list = [elem for elem in os.listdir("tools")]
print(tools_list)
images_list = [cv.imread(img) for img in tools_list]
print(images_list)
mode = "selection mode"
brush_thickness = 15
mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
xp,yp = 0,0
capture = cv.VideoCapture(0)
black = (0,0,0)
white = (255,255,255)
blue = (255,0,0)
red = (0,0,255)
green = (0,255,0)
yellow = (0,255,255)
brown = (0, 75, 150)
image_number = 0
color = black
image_canvas = np.zeros((720, 1280, 3), np.uint8)
with mp_hands.Hands(min_detection_confidence = 0.8, min_tracking_confidence = 0.5, max_num_hands = 2) as hands:
while True:
flag, frame = capture.read()
frame = cv.resize(frame, (1280, 720))
frame[0:125, 0:1280] = images_list[image_number]
CodePudding user response:
Judging by your error, your file structure look like this:
toolsimage1.pngimage2.png
- `the_script.py
The method os.listdir('tools') returns only the content of tools. E.g
image1.pngimage2.png
It will not return tools\image1.png which is what you need to read in the cv2.imread() method. Without proper path, cv2.imread() returns None hence the error TypeError: int() argument must be a string, a bytes-like object or a number, not 'NoneType
You need to replace the line
[cv.imread(img) for img in tools_list]
with
[cv.imread(os.path.join("tools",img)) for img in tools_list]
