По идее, этот код позволяет получить средний цвет внутри каждого контура и нарисовать контуры с этим цветом на конечном изображении. Но у меня появляеться ошибка с маской.
import cv2
import numpy as np
image = cv2.imread("3.jpg")
clahe = cv2.createCLAHE(clipLimit=3., tileGridSize=(8,8))
lab = cv2.cvtColor(image, cv2.COLOR_BGR2LAB) #convert from BGR to LAB color space
l, a, b = cv2.split(lab) # split on 3 different channels
l2 = clahe.apply(l) #apply CLAHE to the L-channel
lab = cv2.merge((l2,a,b)) #merge channels
img2 = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR) #convert from LAB to BGR
blur = cv2.GaussianBlur(img2, (7,7), 0)
hsv = cv2.cvtColor(blur, cv2.COLOR_BGR2HSV)
mask1 = cv2.inRange(hsv, (0,0,0), (179,255,70))
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (7,7))
opening = cv2.morphologyEx(mask1, cv2.MORPH_OPEN, kernel, iterations=1)
close = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel, iterations=2)#this is monchrome image for recognition
contours,h = cv2.findContours(close,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
final = np.zeros(image.shape,np.uint8)
mask = np.zeros(hsv.shape,np.uint8)
for i in range(0,len(contours)):
mask[...]=0
cv2.drawContours(mask,contours,i,255,-1)
cv2.drawContours(final,contours,i,cv2.mean(image,mask),-1)
cv2.imshow('final',final)
cv2.waitKey(0)
Ошибка которую я получаю:
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sn_xpupm\opencv\modules\core\src\mean.dispatch.cpp:126: error: (-215:Assertion failed) mask.empty() || mask.type() == CV_8U in function 'cv::mean'
Заранее спасибо!