Я новичок в 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);
Задача ещё не решена.
Других решений пока нет …