#python #opencv
#python #opencv
Вопрос:
Цель состоит в том, чтобы находить и нацеливать капли разных цветов. На данный момент это будет сделано на одном ядре. Это большое изображение, например, 5 миллионов пикселей. Это глупый способ сделать это и очень медленный, «но он работает», например. для запуска требуется 5 минут, что явно не практично. Весь смысл в том, что я не знаю цвета заранее, поэтому я не могу просто ввести диапазон масок.
import cv2
image = cv2.imread('./image.jpg')
image_width = len(image)
image_height = len(image[0])
hsv_groups = {}
for x in range(image_width):
for y in range(image_height):
hsv_str_key = str(image[x][y])
if hsv_str_key in hsv_groups:
hsv_groups[hsv_str_key] = 1
else:
hsv_groups[hsv_str_key] = 1
# to see distribution, can sort
print(json.dumps(hsv_groups))
После нахождения самых высоких значений HSV я бы использовал их для применения к изображениям, а затем обработал полученные области (большие двоичные объекты).
Возможно, я ошибаюсь относительно того, какое значение содержится, например, в результате изображения. [val, val, val]
, они могут быть RGB, так как вы обычно делаете это для преобразования в HSV перед применением маски.
Одним из улучшений является просто прямое сравнение массивов, которое, похоже, работает. И проверка того, находится ли массив (даже 1×3) в родительском массиве, работает. Я полагаю, что идеальным решением, вероятно, является использование numpy в сочетании с прямым запуском c / cython… хотя сама итерация была довольно быстрой.
Комментарии:
1. Если вам просто нужна гистограмма, используйте функции opencv, numpy или scikit-image histogram.
2. ха-ха, вот что означает гистограмма, в любом случае я проверю это / почитаю об этом. Похоже, тогда очень легко получить максимальное количество цветов. Спасибо
3. Да! Гистограмма — это просто способ хранения подсчетов каждого значения.