Создание отдельных гистограмм для красного, зеленого и синего каналов для изображения RGB с использованием OpenCVsharp - PullRequest
0 голосов
/ 11 апреля 2020

Генерация ТРИ гистограммы для красного, зеленого и синего каналов, полученных отдельно от входного изображения по нашему выбору.

Исходный код Следует использовать только библиотеку 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);

    }

}

Вот вывод: enter image description here

...