opencv 绘制rgb直方图b通道255的值有突变

问题遇到的现象和发生背景

B通道的值存在突变,上面的是自己写的,下面的是用calcHist函数的得到的

问题相关代码,请勿粘贴截图
#include <opencv2/dnn.hpp>
#include <opencv2/dnn/shape_utils.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
    Mat srcImage = imread("E:\\Desktop\\0A.jpg");
    cvtColor(srcImage, srcImage, COLOR_BGR2RGB);
    vector<int> sum_R(256);
    vector<int> sum_G(256);
    vector<int> sum_B(256);
    int srcImage_R, srcImage_G, srcImage_B;
    double maxValue_red = 0.0;
    double maxValue_green = 0.0;
    double maxValue_blue = 0.0;

    for (int i = 0; i < srcImage.rows; i++)
        for (int j = 0; j < srcImage.cols; j++)
        {
            srcImage_R = srcImage.at<Vec3b>(i, j)[0];
            srcImage_G = srcImage.at<Vec3b>(i, j)[1];
            srcImage_B = srcImage.at<Vec3b>(i, j)[2];
            sum_R[srcImage_R] = sum_R[srcImage_R] + 1;
            sum_G[srcImage_G] = sum_G[srcImage_G] + 1;
            sum_B[srcImage_B] = sum_B[srcImage_B] + 1;
            if (maxValue_red < sum_R[srcImage_R])
                maxValue_red = sum_R[srcImage_R];
            if (maxValue_green < sum_G[srcImage_G])
                maxValue_green = sum_G[srcImage_G];
            if (maxValue_blue < sum_B[srcImage_B])
                maxValue_blue = sum_B[srcImage_B];

        }
    


    
    int scale = 256;

    double rate_red = (scale / maxValue_red) * 0.9;
    double rate_green = (scale / maxValue_green) * 0.9;
    double rate_blue = (scale / maxValue_blue) * 0.9;
    printf("maxValue_red = %f, maxValue_green = %f, maxValue_blue = %f\n", maxValue_red, maxValue_green, maxValue_blue);

    Mat dstImage_temp = Mat::zeros(scale, scale, CV_8UC3);
    Mat dstImage(dstImage_temp.size(), dstImage_temp.type(), Scalar(255, 255, 255));//全白图
    vector<Point> point_red;
    vector<Point> point_green;
    vector<Point> point_blue;
    for (int i = 0; i < 256; i++)
    {
        Point point_temp_red = Point(i, scale - sum_R[i] * rate_red);
        point_red.push_back(point_temp_red);
        Point point_temp_green = Point(i, scale - sum_G[i] * rate_green);
        point_green.push_back(point_temp_green);
        Point point_temp_blue = Point(i, scale - sum_B[i] * rate_blue);
        point_blue.push_back(point_temp_blue);
    }
    polylines(dstImage, point_red, false, Scalar(0, 0, 255), 1, 8, 0);
    polylines(dstImage, point_green, false, Scalar(0, 255, 0), 1, 8, 0);
    polylines(dstImage, point_blue, false, Scalar(255, 0, 0), 1, 8, 0);
    line(dstImage, Point(0, scale*0.5), Point(5, scale*0.5), Scalar(0, 0, 0));
    line(dstImage, Point(85, scale), Point(85, scale - 5), Scalar(0, 0, 0));
    line(dstImage, Point(170, scale), Point(170, scale - 5), Scalar(0, 0, 0));
    line(dstImage, Point(255, scale), Point(255, scale - 5), Scalar(0, 0, 0));
    imshow("srcImage", srcImage);
    imshow("图像RGB直方图", dstImage);
    waitKey(0);
    return 0;
}

运行结果及报错内容

img

img

我的解答思路和尝试过的方法
我想要达到的结果