Итак, давайте сделаем это один шаг за раз.
Во-первых, как узнать, какой цвет представлен каким значением? Для этого я сослался на этот вопрос переполнения стека , откуда вы можете получить эту цветовую карту HSV,
Если вы DuckDuckGo / Google / выполните поиск «Цветовая карта HSV или HSL» , вы можете найти множество примеров.
Теперь мы можем выбрать цвет вдоль горизонтальной оси. Мы можем использовать одно значение, например 120
для темно-синего или мы можем использовать диапазон значений, например, 45 to 80
для всех оттенков зеленого.
В чем я не был уверен, так это как определить пропорцию
желтого (или желтоватого), коричневого и красного цветов в конкретное изображение
blockquote>, которое вы задаете в своем вопросе.
Тогда я подумал о двух способах представления цветовой пропорции.
- Доля пикселей, содержащих некоторую часть этого оттенка.
- Доля определенного оттенка относительно всех оттенков на изображении.
Затем, используя следующий скрипт, вы можете получить несколько чисел:
ПРИМЕЧАНИЕ: (Это скрипт Python, который я первоначально разместил. Соответствующий скрипт Matlab находится ниже post.)
import cv2 import numpy as np img = cv2.imread("D:\\lenna.jpg") height_img, width_img, channels_img = img.shape # Converts images from RGB to HSV hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) mask1 = cv2.inRange(hsv, (150, 0, 0), (150, 255,255)) #150 seems like pinkish mask2 = cv2.inRange(hsv, (1,0,0), (20, 255, 255)) #1 to 20 seems orangish total_num_of_pixels = height_img * width_img all_colors = np.sum(hsv[:,:,:] > 0) num_of_pixels_with_pinkish_component = np.sum(mask1 > 0) num_of_pixels_with_orangish_component = np.sum(mask2 > 0) print("%age of pixels with pinkish component:", "{:.2f}".format(num_of_pixels_with_pinkish_component/total_num_of_pixels * 100)) print("%age of pixels with orangish component:", "{:.2f}".format(num_of_pixels_with_orangish_component/total_num_of_pixels * 100)) print("%age of pinkish component in the entire HSV image:", "{:.2f}".format(num_of_pixels_with_pinkish_component/all_colors * 100)) print("%age of orangish in the entire HSV image:", "{:.2f}".format(num_of_pixels_with_orangish_component/all_colors * 100)) # To visualize the results res1 = cv2.bitwise_and(img, img, mask=mask1) res2 = cv2.bitwise_and(img, img, mask=mask2) cv2.imshow('img', img) cv2.imshow('mask1', mask1) cv2.imshow('mask2', mask2) cv2.imshow('res1', res1) cv2.imshow('res2', res2) # To save the output cv2.imwrite('D:\\mask1.png', mask1) cv2.imwrite('D:\\mask2.png', mask2) cv2.imwrite('D:\\res1.png', res1) cv2.imwrite('D:\\res2.png', res2)
- Вывод :
% возраста пикселей с розоватой составляющей: 0,41
% возраста пикселей с оранжевым компонентом: 35,58
% возраста розоватого компонента во всем изображении HSV: 0,15
% возраста оранжевого во всем изображении HSV: 13,27
blockquote >
- Вот как выглядит результат:
MASK1 (150 на оси оттенка кажется розоватым) [ 116]
MASK2 (1 ~ 20 на оси оттенка кажется оранжевым)
RES1 [1149 ]
RES2
Вот эквивалентный скрипт MATLAB .
close all; clear all; clc; img = imread("/home/junglefox/Downloads/lenna.png"); figure, imshow(img), title('original image (RGB)'); img_size = size(img); hsv_img = rgb2hsv(img); hsv_img = im2uint8(hsv_img); figure, imshow(hsv_img), title('original image in HSV'); % Orange component between 1 and 20 on the HSV map minval = [1 0 0]; %// Define three element vector here for each colour plane i.e. [0 128 128]; maxval = [20 255 255]; %// Define three element vector here for each colour plane i.e. [0 128 128]; out = true(img_size(1), img_size(2)); for p = 1 : 3 out = out & (hsv_img(:,:,p) >= minval(p) & hsv_img(:,:,p) <= maxval(p)); end figure, imshow(out), title('image of orange component in image only'); total_num_of_pixels = img_size(1) * img_size(2); all_colors = sum(hsv_img(:,:,:) > 0); num_of_pixels_with_orangish_component = sum(sum(out > 0)); percentage_orange = num_of_pixels_with_orangish_component/total_num_of_pixels * 100; printf("percentage of orange component in all pixels:%d\n", percentage_orange);
setPartName(String)
и setTitleImage(Image)
, оба на WorkbenchPart
то, что Вы ищете.
Оба EditorPart
s и ViewPart
расширения WorkbenchPart
.
Нужно отметить, что оба этих метода protected
так должен быть назван из самой части.