@Alexa_Smol

Ошибка: cv2.error: OpenCV(4.8.0) :-1: error: (-5:Bad argument) in function 'cvtColor', как исправить?

Только учусь работать с open cv, пытаюсь сделать распознавание эмоций по улыбке и глазам. Вылазит ошибка. Вот проблемный кусок кода:
import cv2
import matplotlib
from cv2 import CascadeClassifier

import numpy as np
import matplotlib.pyplot as plt
import mediapipe as mp

faceCascade = CascadeClassifier('haarcascade_frontalface_default.xml')

video_capture = cv2.VideoCapture(0)
while True:
operatedImage = cv2.cvtColor(video_capture, cv2.COLOR_BGR2GRAY)

operatedImage = np.float32(operatedImage)
dest = cv2.cornerHarris(operatedImage, 2, 5, 0.07)
dest = cv2.dilate(dest, None)
video_capture[dest > 0.01 * dest.max()] = [0, 0, 255]
cv2.imshow('Image with Borders', video_capture)
if cv2.waitKey(0) & 0xff == 27:
cv2.destroyAllWindows()

mp_facemesh = mp.solutions.face_mesh
mp_drawing = mp.solutions.drawing_utils
denormalize_coordinates = mp_drawing._normalized_to_pixel_coordinates
# Landmark points corresponding to left eye
all_left_eye_idxs = list(mp_facemesh.FACEMESH_LEFT_EYE)
# flatten and remove duplicates
all_left_eye_idxs = set(np.ravel(all_left_eye_idxs))

# Landmark points corresponding to right eye
all_right_eye_idxs = list(mp_facemesh.FACEMESH_RIGHT_EYE)
all_right_eye_idxs = set(np.ravel(all_right_eye_idxs))

# Combined for plotting - Landmark points for both eye
all_idxs = all_left_eye_idxs.union(all_right_eye_idxs)

# The chosen 12 points: P1, P2, P3, P4, P5, P6
chosen_left_eye_idxs = [362, 385, 387, 263, 373, 380]
chosen_right_eye_idxs = [33, 160, 158, 133, 153, 144]
all_chosen_idxs = chosen_left_eye_idxs + chosen_right_eye_idxs
image = cv2.imread(r"test-open-eyes.jpg")
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # convert to RGB
image = np.ascontiguousarray(image)
imgH, imgW, _ = image.shape
  • Вопрос задан
  • 477 просмотров
Пригласить эксперта
Ответы на вопрос 2
Vindicar
@Vindicar
RTFM!
Почитать документацию на cvtColor() и осознать, что она принимает на вход объект изображения, а не VideoCapture(), который ты ей передаёшь. Так что тебе придётся преобразовывать в нужную цветовую систему каждый кадр отдельно.

А еще почитать доки на VideoCapture(), в частности, про метод read(). Пример кода там есть.
Ответ написан
Комментировать
@DDV23
Биокибернетик
Ошибка указывает на проблему с функцией cv2.cvtColor(). Вы пытаетесь преобразовать объект video_capture с помощью cv2.cvtColor(video_capture, cv2.COLOR_BGR2GRAY), но video_capture является объектом cv2.VideoCapture, а не изображением.
используйте метод read()
обратите внимание сюда:
ret, frame = video_capture.read()  # Считываем кадр
operatedImage = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # Используем 'frame', а не 'video_capture'
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы