import cv2
import numpy as np
import matplotlib.pyplot as plt
import imageio
## Read
img = cv2.imread("test.png",-1)
## convert to hsv
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv, (36, 25, 25), (70, 255,255))
contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
idx = 0
mask1 = np.zeros_like(img)
cv2.drawContours(mask1, contours, idx, (255,255,255), -1)
out = np.zeros_like(img)
out[mask1 == (255,255,255)] = img[mask1 == 255]
fig, axs = plt.subplots(1, 3, figsize=(16, 4))
for ax, image in zip(axs, ['img', 'mask1', 'out']):
ax.imshow(eval(image))
ax.set_title(image)
ax.grid(True)
plt.show()
=>
Я позволю вам поиграть с этим фрагментом, особенно если вы хотите удалить свой зеленый контур.
Если вы хотите перевернуть сохраненную область, вам необходимо заменить:
out[mask1 == (255,255,255)] = img[mask1 == 255]
на:
out[mask1 == (0,0,0)] = img[mask1 == 0]
(см. Второй рисунок ниже)
Я только что импортировал matplotlib для удобства здесь.