Я пытаюсь найти самый большой контур вокруг автомобиля на изображении.
Чтобы найти контур, я узнал следующее из официальной документации OpenCv:
#convert the image to grayscale from rgb
1. image_gray = cv2.cvtColor(image,cv2.COLOR_RGB2GRAY)
2. threshold = cv2.threshold(image_gray, 127,(0,255,0),0)
3. image2, contours_list, hierarchy = cv2.findContours(threshold, cv2.RETR_LIST, cv2.CHAIN_APROX_SIMPLE)
задача -1:
Я уже применил cv2.GaussianBlur () и преобразовал его вФормат HSV для создания масок для последующего обнаружения определенного цвета с использованием методов MorphologyEx.Проблема в том, что код на шаге 2 выше требует, чтобы изображение было либо в формате RGB, чтобы преобразовать его в шкалу серого, либо в сам формат Grey, но у меня есть формат HSV, для которого нет такого флага, как cv2.COLOR_HSV2GRAY.
Я написал следующие 2 версии одного и того же метода, чтобы найти самый большой контур, и они выдают 2 разные ошибки:
В этом методе я сначала создаю порог, для которого требуется изображение в оттенках серого, чтобы перейти к методу cv2.findContour
def find_biggest_contour(image):
image = image.copy()
#1
image_gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)
#2
threshold = cv2.threshold(image_gray,127, 255,0)
#3
image2, contours, heirarchy = cv2.findContours(threshold, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) # countours is a python list
contours_sizes= [(cv2.contourArea(cnt), cnt) for cnt in contours]
biggest_contour = max(contours_sizes, key=lambda x: x[0])[1]
#define a mask
mask = np.zeros(image.shape, np.uint8)
cv2.drawContours(mask,[biggest_contour], -1, (0,255,0), 3)# 3=thickness, -1= draw all contours, 2nd arg must be a list
return biggest_contour, mask
этот метод выдает мне следующую ошибку:
Другая версия выглядит следующим образом (в основном, у меня естьоткуда-то взял):
def find_biggest_contour(image):
image = image.copy()
im2,contours, hierarchy = cv2.findContours(image, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
contour_sizes = [(cv2.contourArea(contour), contour) for contour in contours]
biggest_contour = max(contour_sizes, key=lambda x: x[0])[1]
mask = np.zeros(image.shape, np.uint8)
cv2.drawContours(mask, [biggest_contour], -1, 255, -1)
return biggest_contour, mask
Этот метод выдает следующую ошибку:
![error for the 2nd version of method](https://i.stack.imgur.com/omhDp.png)
Пожалуйста, помогите мне исправить ошибки.Я новичок в opencv.