2016-07-30 4 views
0

Скажем, что у нас есть изображение в сером цвете. Есть ли способ рассчитать, как распределяются нечерные пиксели, т. Е. Группируются ли они в одном или нескольких местах или распределяются равномерно по всему изображению?Рассчитать распределение цвета по изображению в OpenCV

ответ

0

Похоже, что вы ищете гистограмму изображения. Это фундаментальная операция обработки изображений.

«Гистограммы собраны отсчеты данных, организованных в виде набора предопределенных бункеров.»

документ гистограммы вычисления с использованием OpenCV в this link

0

Это звучит, как вы ищете, пространственные моменты растрированной версии вашего изображения.

Прежде всего, необходимо порог изображение, чтобы сделать его двоичным: http://docs.opencv.org/2.4/modules/imgproc/doc/miscellaneous_transformations.html?highlight=threshold#threshold

Вы можете вычислить изображения моментов: http://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=moments#moments

Если вы хотите физическую аналогию пространственных моментов вы можете что каждый белый пиксель представляет собой единичную массу точки, тогда вторым моментом будет вращательная инерция изображения. Если белые пиксели (точечные массы) плотно сгруппированы, то второй момент будет низким (изображение будет легко вращаться).

0

Я хочу поделиться другим подходом, который я использовал.

Mat img = imread(argv[1], CV_LOAD_IMAGE_COLOR); 
cvtColor(img, img, CV_RGB2GRAY); 
threshold(img, img, 35, 255, THRESH_BINARY); 

Mat distance; 
distanceTransform(img, distance, CV_DIST_L2, 3); 
distance = min(distance, 1); 
Scalar distribution = mean(dist); 

cout << "The distribution is: " << distribution << std::endl; 

Хитрость является сочетание distanceTransform и min функций. Эффект функции min будет меньше на изображениях с хорошим распределением, а среднее значение будет больше.

Смежные вопросы