gpt4 book ai didi

比较opencv中灰度图像的直方图

转载 作者:太空宇宙 更新时间:2023-11-04 05:03:36 26 4
gpt4 key购买 nike

嗨,谁能给我提供一个简单的开放式 cv 程序来加载两个 RGB 图像,将其转换为灰度,计算直方图,然后比较它们的直方图。我在开放的简历网站上看到了一个类似的程序,但他们使用的是 HSV 而不是灰度,它是一个 C++ 程序。我可以查看流程和所有内容……我不知道要使用哪些函数以及它们的参数意味着什么……问候,基兰

最佳答案

这是执行此操作的简单代码片段。由于您没有告诉您要如何比较直方图,我建议您直观地进行比较。

#include <opencv2/opencv.hpp>

void show_histogram(std::string const& name, cv::Mat1b const& image)
{
// Set histogram bins count
int bins = 256;
int histSize[] = {bins};
// Set ranges for histogram bins
float lranges[] = {0, 256};
const float* ranges[] = {lranges};
// create matrix for histogram
cv::Mat hist;
int channels[] = {0};

// create matrix for histogram visualization
int const hist_height = 256;
cv::Mat3b hist_image = cv::Mat3b::zeros(hist_height, bins);

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

double max_val=0;
minMaxLoc(hist, 0, &max_val);

// visualize each bin
for(int b = 0; b < bins; b++) {
float const binVal = hist.at<float>(b);
int const height = cvRound(binVal*hist_height/max_val);
cv::line
( hist_image
, cv::Point(b, hist_height-height), cv::Point(b, hist_height)
, cv::Scalar::all(255)
);
}
cv::imshow(name, hist_image);
}

int main (int argc, const char* argv[])
{
// here you can use cv::IMREAD_GRAYSCALE to load grayscale image, see image2
cv::Mat3b const image1 = cv::imread("C:\\workspace\\horse.png", cv::IMREAD_COLOR);
cv::Mat1b image1_gray;
cv::cvtColor(image1, image1_gray, cv::COLOR_BGR2GRAY);
cv::imshow("image1", image1_gray);
show_histogram("image1 hist", image1_gray);

cv::Mat1b const image2 = cv::imread("C:\\workspace\\bunny.jpg", cv::IMREAD_GRAYSCALE);
cv::imshow("image2", image2);
show_histogram("image2 hist", image2);

cv::waitKey();
return 0;
}

结果:

enter image description here

关于比较opencv中灰度图像的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15771512/

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