Генерация ТРИ гистограммы для красного, зеленого и синего каналов, полученных отдельно от входного изображения по нашему выбору.
Исходный код Следует использовать только библиотеку OpenCVSharp.
Пример кода для преобразования оригинала в уровень серого и построения гистограммы для изображения в градациях серого приведен ниже. Таким же образом мне нужно изменить исходное изображение на гистограммы красного, зеленого и синего.
public void convertGray()
{
grayImage = Cv.CreateImage(src.Size, BitDepth.U8, 1);
Cv.CvtColor(src, grayImage, ColorConversion.RgbToGray);
Cv.SaveImage("grayImage.jpg", grayImage);
}
//Draw Histogram
public void drawHistogram()
{
float[] range = { 0, 255 };
float[][] ranges = { range };
int histSize = 255;
float minValue = 0;
float maxValue = 0;
convertGray();
IplImage histImage = Cv.CreateImage(src.Size, BitDepth.U8, 1);
CvHistogram hist = Cv.CreateHist(new int[] { histSize }, HistogramFormat.Array, ranges, true);
Cv.CalcHist(grayImage, hist);
Cv.GetMinMaxHistValue(hist, out minValue, out maxValue);
histImage.Set(CvColor.White);
Cv.Scale(hist.Bins, hist.Bins, ((double)histImage.Height) / maxValue, 0);
int binW = Cv.Round((double)histImage.Width / histSize);
int i;
for (i = 0; i < histSize; i++)
{
histImage.Rectangle(
new CvPoint(i * binW, grayImage.Height),
new CvPoint((i + 1) * binW, grayImage.Height - Cv.Round(hist.Bins[i])),
CvColor.Black, 1, LineType.Link8, 0);
}
Cv.SaveImage("HistogramImage.jpg", histImage);
}
}
Вот вывод: