Попытка обнаружить и замаскировать цветы на изображениях с использованием OpenCV и адаптивного порогаPython

Программы на Python
Anonymous
Попытка обнаружить и замаскировать цветы на изображениях с использованием OpenCV и адаптивного порога

Сообщение Anonymous »

Я работаю над проектом, в котором мне нужно обнаруживать и маскировать цветы на изображениях с помощью OpenCV и адаптивного порогового определения. Несмотря на мои усилия, результаты противоречивы. Некоторые цветы маскируются хорошо, а другие либо маскируются частично, либо вообще не обнаруживаются. Для этой задачи я использую набор данных Oxford Flowers 102 в TensorFlow. Ниже приведен код, который я использую:

Код: Выделить всё

(train_dataset, test_dataset, validation_dataset), ds_info = tfds.load('oxford_flowers102', split=['test', 'train','validation'], with_info=True, as_supervised=True)

def normalize_img(image, label):
image = tf.image.resize(image, (256, 256))
return tf.cast(image, tf.float32) / 255.0, label

train_dataset = train_dataset.map(normalize_img, num_parallel_calls=tf.data.experimental.AUTOTUNE)
train_dataset = train_dataset.cache()
train_dataset = train_dataset.shuffle(ds_info.splits['train'].num_examples)
train_dataset = train_dataset.batch(32)
train_dataset = train_dataset.prefetch(tf.data.experimental.AUTOTUNE)

def detect_flowers_and_mask(image):
image_np = (image.numpy() * 255).astype(np.uint8)
gray_image = cv2.cvtColor(image_np, cv2.COLOR_RGB2GRAY)
binary_image = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY_INV, 11, 2)
contours, _ = cv2.findContours(binary_image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

if contours:
max_contour = max(contours, key=cv2.contourArea)
mask = np.zeros_like(gray_image, dtype=np.uint8)
cv2.drawContours(mask, [max_contour], -1, (255, 255, 255), thickness=cv2.FILLED)
masked_image = cv2.bitwise_and(image_np, image_np, mask=mask)
else:
masked_image = image_np

return masked_image

plt.figure(figsize=(15, 15))
for i, (image_batch, label_batch) in enumerate(train_dataset.take(20)):
for image, label in zip(image_batch, label_batch):
masked_image = detect_flowers_and_mask(image)
plt.subplot(4, 5, i+1)
plt.imshow(masked_image)
plt.title(ds_info.features['label'].int2str(label.numpy()))
plt.axis("off")
plt.tight_layout()
plt.show()
Изображение


Подробнее здесь: https://stackoverflow.com/questions/786 ... ive-thresh

Вернуться в «Python»