Как рассчитать белую область с помощью Python и Opencv? - PullRequest
1 голос
/ 21 июня 2020

Я пытаюсь вычислить площадь белых пикселей на этом изображении:

Мой код:

import cv2
import matplotlib.pyplot as plt
import numpy as np

img = cv2.imread("tepsi.jpg")
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
mask = cv2.inRange(hsv,(21, 10, 15), (30, 255, 255) )
cv2.imshow("orange", mask)
cv2.waitKey()
cv2.destroyAllWindows()

Как я могу решить эту проблему? На самом деле моя цель - найти пустые места на подносе с едой.

Спасибо за ваши ответы.

Ответы [ 2 ]

1 голос
/ 22 июня 2020

введите описание изображения здесь Спасибо за ваши советы, я нашел решение моей проблемы для изображения выше. Но я попробую ваши советы ...

Примечание: мой лоток - это белая область, и сейчас он постоянный.

Мое решение:

import numpy as np
import cv2

image = cv2.imread("petibor_biskuvi.png")
dimensions = image.shape

height= image.shape[0]
width = image.shape[1]
size = height*width

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
gray = cv2.GaussianBlur(gray, (7, 7), 0)


_,thresh = cv2.threshold(gray,150,255,cv2.THRESH_BINARY_INV)

cnts, hier = cv2.findContours(thresh.copy(), cv2.RETR_EXTERNAL,cv2.CHAIN_APPROX_SIMPLE)
size_elements = 0
for cnt in cnts:
    cv2.drawContours(image,cnts, -1, (0, 0, 255), 3)
    size_elements += cv2.contourArea(cnt)
    print(cv2.contourArea(cnt))



cv2.imshow("Image", image)
print("size elements total : ", size_elements)
print("size of pic : ", size)
print("rate of fullness : % ", (size_elements/size)*100)
cv2.waitKey(0)
1 голос
/ 21 июня 2020

Это один из вариантов. Так как белый цвет в BGR равен (255, 255, 255), id предлагает вам преобразовать изображение в логическое значение true, где каждый (независимый) канал равен 255:

b, g, r = cv2.split(img)
wb = b == 255
wg = g == 255
wr = r == 255

Значение всех каналов должно быть 255 (True) для того же пикселя, поэтому используйте np.bitwise_and :

white_pixels_if_true = np.bitwise_and(wb, np.bitwise_and(wg, wr))

Наконец, получите количество истинного значения и размер изображения и найдите процент белых пикселей:

img_size = r.size
white_pixels_count = np.sum(white_pixels_if_true)
white_area_ratio = white_pixels_count / img_size

Учитывая площадь изображения, вы можете умножить площадь на white_area_ratio, чтобы получить белую область.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...