массивы — определение точного цветового диапазона наиболее распространенного цвета в данном изображении с использованием переполнения стека OpenCv

Я новичок в OpenCV и разрабатываю программу обработки изображений с использованием opencv c ++. У меня есть изображение только определенного цвета (например, розовый).

введите описание изображения здесь

Я получаю значение RGB изображения для 3-х отдельных массивов. Если я рассматриваю массив значений R, я могу получить набор чисел, как показано ниже. Если я считаю, что набор чисел, это стандартные значения, и другие числа должны иметь близкие значения к нему. Но есть некоторые числа, которые сильно отличаются от этого числа, и я хочу удалить их из набора номеров. В наборе ниже следует удалить 0, 0, 0, 0, 0, 0, 0, 1, 57 и 243, 255 , 255. Наконец, я хочу получить цветовую гамму данного цветного изображения. Я хочу получить 166 — 170 диапазонов кластера. Каков наилучший способ решить эту проблему ?. Есть ли простой способ решить эту проблему с помощью opencv? или придется разрабатывать алгоритм?

0, 0, 0, 0, 0, 0, 0, 1, 57, 166, 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 170, 170, 170, 243, 255, 255

Вот мой

        Mat image;
image = imread("saved.jpg", CV_LOAD_IMAGE_COLOR);
const int SIZE = image.rows*image.cols;
int bValue[SIZE];
int gValue[SIZE];
int rValue[SIZE];
int index = 0;
for(int i=1;i <= image.rows; i++){
for(int j=1;j <= image.cols; j++){
int b = (int)(image).at<cv::Vec3b>(j,i)[0];
int g = (int)(image).at<cv::Vec3b>(j,i)[1];
int r = (int)(image).at<cv::Vec3b>(j,i)[2];

bValue[index]= b ;
gValue[index]= g ;
rValue[index]= r ;
index++;
}
}
sort(bValue,bValue+SIZE);
sort(gValue,gValue+SIZE);
sort(rValue,rValue+SIZE);

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]