Удаление фона с помощью Open CV не является точным, и некоторые изображения не могут быть выполнены должным образом

#python #opencv #image-processing

#python #opencv #обработка изображений

Вопрос:

Я пытаюсь удалить фон с изображений с помощью OpenCV. Большинство операций выполняются успешно, но некоторые изображения не могут быть обработаны должным образом. Любая помощь или предложение будут оценены. мой код:

 import os
import numpy 
import cv2
import os
import glob
img_dir = r"C:UserskaanDocumentsPlant_Seedlings_Classification-masterPlant_Seedlings_Classification-masterdataosmancik"
data_path = os.path.join(img_dir,'*g')
files = glob.glob(data_path)
data = []
for f1 in files:
    img = cv2.imread(f1)
    img = cv2.resize(img, (640, 480)) 
    data.append(img)


data2 = []
arr = numpy.array(data2) 

for pict in data:

    gray_img = cv2.cvtColor(pict, cv2.COLOR_BGR2GRAY)
    _, thresh = cv2.threshold(gray_img, 127, 255, cv2.THRESH_BINARY_INV   cv2.THRESH_OTSU)
    img_contours = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)[-2]
    img_contours = sorted(img_contours, key=cv2.contourArea)

    for i in img_contours:
        if cv2.contourArea(i) > 100:
             break
    mask = np.zeros(img.shape[:2], np.uint8)
    cv2.drawContours(mask, [i],-1, 255, -1)
    new_img = cv2.bitwise_and(pict, pict, mask=mask)
    name=randomString() ".jpg"
    path = r"C:UserskaanDocumentsPlant_Seedlings_Classification-masterPlant_Seedlings_Classification-mastersegmentatedosmancik2"
    cv2.imwrite(os.path.join(path , name), new_img)
  

Изображение:

Образец изображения

Это хороший пример:

Это хороший пример

Это плохой пример:

Это плохой пример

Комментарии:

1. Вы полагаетесь на яркость, которая является плохой информацией по сравнению с цветом. Попробуйте установить пороговое значение насыщенности или оттенка.

2. Я новичок в обработке изображений, поэтому мне нужно руководство по определению порога насыщенности или оттенка.

3. Преобразовать в насыщенность или в оттенок и пороговое значение.

Ответ №1:

Используйте фильтрацию HSV.

  1. Измените цвета изображения с BGR на HSV (значение насыщенности оттенка).
  2. Фильтруйте определенный диапазон насыщенности и оттенка.

Обратитесь к этой странице для получения кода https://pythonprogramming.net/color-filter-python-opencv-tutorial /