Я пытаюсь обрезать изображение после применения предполагаемого преобразования с минимальной площадью прямоугольника - PullRequest
0 голосов
/ 20 января 2020

Я пытаюсь применить счетчик, а затем прямоугольник минимальной площади на изображении маркеров, и я получил ошибку, о которой упоминал в конце реализации. Я попытался устранить ошибку, преобразовав маску в серое изображение, но оно показывает ту же ошибку. Это маркерное изображение, которое я использовал для создания контура, а затем применяя ограничивающий прямоугольник, и после применения ограничивающего прямоугольника я пытаюсь применить преобразование перспективы для удалить проблему ориентации в исходном изображении

enter image description here

Вот моя реализация Детали

                           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)

Проблема заключается в том, когда Я пытаюсь замаскировать изображение из исходного изображения, это ошибка показа. Я упоминал об ошибке ниже, когда я пытаюсь применить маску к изображению. я хочу обрезать исходное изображение и сохранить его в другом месте, введя описание изображения, применяя маску к исходному изображению, используя окончательное изображение, полученное после преобразования перспективы

...