Я пытаюсь применить счетчик, а затем прямоугольник минимальной площади на изображении маркеров, и я получил ошибку, о которой упоминал в конце реализации. Я попытался устранить ошибку, преобразовав маску в серое изображение, но оно показывает ту же ошибку. Это маркерное изображение, которое я использовал для создания контура, а затем применяя ограничивающий прямоугольник, и после применения ограничивающего прямоугольника я пытаюсь применить преобразование перспективы для удалить проблему ориентации в исходном изображении
Вот моя реализация Детали
i = 3
imagemask = np.zeros(markers.shape)
imagemask[markers==i]=255
dilation = cv2.dilate(imagemask,kernel=np.ones((5,5)),iterations = 3)
"Расширение для увеличения границы на изображении RGB "
# coords = np.column_stack(np.where(imagemask > 0))
# float_img = np.random.random((4,4))
im = np.array(dilation * 255, dtype = np.uint8)
" Для устранения проблемы 8UC1 "
contours, hierarchy =
cv2.findContours(im,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)
" Нарисовать контур "
imgaftercounterboundary = cv2.drawContours(dilation, contours, -1, (0,255,0), 3)
# plt.imshow(img,cmap= 'gray')
cnt = contours[0]
x,y,w,h = cv2.boundingRect(cnt)
# img.shape
# im = np.array(imagemask / 255, dtype = np.uint64)
# img=cv2.cvtColor(img,cv2.COLOR_GRAY2BGR)
plt.figure(figsize=(12,10))
imageafterBounding = cv2.rectangle(coffee_RGB,(x,y),(x+w,y+h),
(0,255,0),2)
# rect = cv2.minAreaRect(cnt)
# box = cv2.boxPoints(rect)
# box = np.int0(box)
# im = cv2.drawContours(im,[box],0,(0,0,255),2)
# Finding minimum Area
rect = cv2.minAreaRect(cnt)
#print(rect)
box = cv2.boxPoints(rect)
# print(box)
box = np.int0(box)
x1 , y1 , w1 , d1 = cv2.boundingRect(box)
print(x1 , y1 , w1 , d1)
source = np.float32(box)
print(source)
destination = np.float32([[0,0],[0, d1],[w1,d1],[w1,0]])
# print(x1,y1,w1,h1)
# src[ : , 0] = [x1,y1]
# scr[ : ,1] = [w1,h1]
# x , y , b , w = box.split()
im = cv2.drawContours(imageafterBounding,[box],0,(200,0,2),2)
# plt.figure(figsize=(12,10))
# plt.imshow(im)
M = cv2.getPerspectiveTransform(source,destination)
dst = cv2.warpPerspective(coffee_RGB,M,(300,300))
mask = dst
finalImage = cv2.bitwise_and(coffee_RGB,coffee_RGB,mask = mask)
ptl.imshow(finalImage)
Проблема заключается в том, когда Я пытаюсь замаскировать изображение из исходного изображения, это ошибка показа. Я упоминал об ошибке ниже, когда я пытаюсь применить маску к изображению. я хочу обрезать исходное изображение и сохранить его в другом месте, введя описание изображения, применяя маску к исходному изображению, используя окончательное изображение, полученное после преобразования перспективы