#python #numpy #opencv #image-processing
#python #numpy #opencv #обработка изображений
Вопрос:
Я применил некоторые морфологические операции к пороговому изображению, и теперь я хочу преобразовать его обратно в исходное изображение, но только там, где изображение черное. Вот пример псевдокода того, что я пытаюсь сделать:
import cv2
import numpy as np
img = cv2.imread("img01.jpg")
empty_image = np.zeros([img.width,img.height,3],dtype=np.uint8)
grey = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
ret,thresh1 = cv2.threshold(grey,125,255,cv2.THRESH_BINARY)
kernel = np.ones((5, 5), np.uint8)
mask = cv2.erode(thresh1, kernel, iterations=2)
mask = cv2.dilate(mask, kernel, iterations=2)
for(i in mask):
if(mask[i]>0]:
empty_image[i]=img[i]
Другими словами: как я могу восстановить части исходного изображения в части порогового изображения?
Ответ №1:
После нахождения маски просто используйте result = cv2.bitwise_and(img,img,mask=mask)
без необходимости объявлять пустое изображение, которое называется процессом маски.
Другой способ — использовать логическую индексацию, img[mask==0] = 0
чтобы сделать каждый пиксель изображения нулевым (черным), если он черный в маске.
И это результат:
Эта ссылка для полезного примера для понимания bitwise_and
и других простых связанных операций в opencv
документах.
Комментарии:
1. Это именно то, на что я надеялся! Большое спасибо. Я действительно не слишком старался разобраться в цикле выполнения действий, потому что для этого конкретного проекта O (n) слишком медленный!
2. да, лучше избегать использования цикла for , вы можете решить это с помощью нарезки,
img[mask==0] = 0
чтобы сделать каждый пиксель исходного изображения черным, если он черный в маске.