gpt4 book ai didi

c++ - 读取直方图后未处理的异常(使用 calcHist 创建)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:45:33 25 4
gpt4 key购买 nike

我试图从 OpenCV 中的彩色(3 channel )图像中获取直方图,但每次我都像这样执行 calcHist 直方图:

//int histSize[3];
//float hranges[2];
//const float* ranges[3];
//int channels[3];

ColorHistogram::ColorHistogram()
{
// Prepare arguments for a color histogram
histSize[0]= histSize[1]= histSize[2]= 256;
hranges[0]= 0.0; // BRG range
hranges[1]= 255.0;
ranges[0]= hranges; // all channels have the same range
ranges[1]= hranges;
ranges[2]= hranges;
channels[0]= 0; // the three channels
channels[1]= 1;
channels[2]= 2;
}

cv::MatND ColorHistogram::getHistogram(const cv::Mat &image)
{
cv::MatND hist;
// Compute histogram
cv::calcHist(&image,
1, // histogram of 1 image only
channels, // the channel used
cv::Mat(), // no mask is used
hist, // the resulting histogram
3, // it is a 3D histogram
histSize, // number of bins
ranges // pixel value range
);
return hist;
}

enter image description here

当我尝试将结果提供给例如 cv::minMaxLoc 时,我得到了一个未处理的异常。

cv::Mat ColorHistogram::getHistogramImage(const cv::Mat &image){
// Compute histogram first
cv::MatND hist = getHistogram(image);
// Get min and max bin values
double maxVal=0;
double minVal=0;
cv::minMaxLoc(hist, &minVal, &maxVal, 0, 0);
//....
}

编辑

我不知道这是否重要,但我在控制台中收到此错误:

OpenCV Error: Assertion failed (img.dims <= 2) in unknown function, file C:\slave\WinInstallerMegaPack\src\opencv\modules\core\src\stat.cpp, line 788

和我的图像dims = 2

最佳答案

很遗憾,您不能使用 3D 直方图调用 minMaxLoc(即 hist.dims == 3 为真)。下面是 minMaxLoc 的代码:

void cv::minMaxLoc( InputArray _img, double* minVal, double* maxVal,
Point* minLoc, Point* maxLoc, InputArray mask )
{
Mat img = _img.getMat();
CV_Assert(img.dims <= 2); // <-- This is the line that is asserting for you...

minMaxIdx(_img, minVal, maxVal, (int*)minLoc, (int*)maxLoc, mask);
if( minLoc )
std::swap(minLoc->x, minLoc->y);
if( maxLoc )
std::swap(maxLoc->x, maxLoc->y);
}

您必须手动搜索 3D 直方图中的最小值和最大值。您可以使用 NAryMatIterator以帮助简化搜索。有一个如何在文档中使用它的示例。另外,你可以找到我的相关答案here .

关于c++ - 读取直方图后未处理的异常(使用 calcHist 创建),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8828064/

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