gpt4 book ai didi

c++ - 无法在 OpenCV 中获取直方图图像

转载 作者:行者123 更新时间:2023-11-28 07:17:32 24 4
gpt4 key购买 nike

我是 OpenCV 的新手,正在学习绘制单 channel 图像的直方图。当我运行程序时,我只得到一条白线。请告诉我这段代码有什么问题。

int histSize[1] = {256};
float hranges[2] = {0.0, 255.0};
const float* ranges[1] = {hranges};
int channels[1] = {0};

cv::MatND getHistogram(const cv::Mat &image) {
cv::MatND hist;

cv::calcHist(&image,1,channels,cv::Mat(),hist,1,histSize,ranges);

return hist;
}

cv::Mat getHistogramImage(const cv::Mat &image) {
cv::MatND hist = getHistogram(image);

double minVal = 0;
double maxVal = 0;

cv::minMaxLoc(hist,&minVal,&maxVal,0,0);

cv::Mat histImg(histSize[0],histSize[0],CV_8U,cv::Scalar(255));

int hpt = static_cast<int>(0.9*histSize[0]);

for(int h=0; h<256; ++h){
float binVal = hist.at<float>(h);

int intensity = static_cast<int>(binVal*hpt/maxVal);

cv::line(histImg,cv::Point(h,histSize[0]),
cv::Point(h,histSize[0]-intensity),
cv::Scalar::all(0));
}
return histImg;
}

最佳答案

对于单 channel (以及色调 channel ),可以使用以下代码:

{
Mat input("filepath/image.jpg", 1);
Mat hsv_input;

cvtColor( input, hsv_input, CV_BGR2HSV );

int h_bins = 5;
int histSize[] = { h_bins};
float h_ranges[] = { 0, 180 };

const float* ranges[] = { h_ranges};
int channels[] = { 0 };

MatND original_hist_input;
calcHist( &hsv_input, 1, channels, Mat(), original_hist_input, 1, histSize, ranges, true, false );
normalize( original_hist_input, original_hist_input, 0, 1, NORM_MINMAX, -1, Mat() );

}

关于c++ - 无法在 OpenCV 中获取直方图图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20001366/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com