Я хочу создать три круглые маски, каждая из которых будет иметь разную заливку в разных местах на изображении.
Прилагается мой код, но когда я печатаю маску, они являются логическими значениями,
я хочу, чтобы маски давали исходные значения заполнения в плавающей точке.
import numpy as np
import random
from scipy import signal
#Creates masks
def createCircle1(width,height , rad ):
w = random.randint(1, height)
h = random.randint(1, height)
center = [int(w), int(h)]
radius = rad
Y, X = np.ogrid[:height, :width]
dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)
mask1 = dist_from_center
mask1+= np.sin(20)
mask1 = dist_from_center <= radius
w = random.randint(1, height)
h = random.randint(1, height)
center = [int(w), int(h)]
radius = rad
Y, X = np.ogrid[:height, :width]
dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)
mask2 = dist_from_center
mask2+= np.sign(np.sin(10)) #fill
mask2 = dist_from_center <= radius
w = random.randint(1, height)
h = random.randint(1, height)
center = [int(w), int(h)]
radius = rad
Y, X = np.ogrid[:height, :width]
dist_from_center = np.sqrt((X - center[0])**2 + (Y-center[1])**2)
mask3 = dist_from_center
mask3+= signal.sawtooth(10 * np.pi) #fill
mask3 = dist_from_center <= radius
return mask1, mask2, mask3
#if i print mask1, mask2, mask3, they give boolean arrays and not the float values
img = np.zeros([100,100],dtype=np.uint8)
img.fill(20)
img_test = img
#Adds circular masks to the image
def addCircle1(test_image):
m1, m2, m3 = createCircle1(width = 100, height = 100 , rad = 8 )
masked_img = test_image.copy()
masked_img[m1] = 0
masked_img[m2] = 0
masked_img[m3] = 0
return masked_img
m4 = addCircle1(img)
если я удаляю mask3 = dist_from_center <= radius </strong> из creatCircle1 , он печатает значения маски в float, но затем не маскирует круги на данном изображении.
m4 должен дать изображение с 3 круглыми масками, каждая из которых имеет разную заливку.