opencv - OpenCv 中值数组的直方图

标签 opencv image-processing histogram

我有一个包含 630 个值的矩阵(值范围为 0-35)...

我想找到这个矩阵中出现频率最高的值。那么如何为此编写直方图呢?还有什么其他方法可以找到最常出现的值(我不想使用计数器,因为我需要 36 个计数器,而且我的代码会变得非常低效)

..谢谢!

最佳答案

您可以使用 calcHist使用尺寸为 1xN 的垫子,在您的情况下 N 为 630。

我不明白你反对计数器的论点。要构建直方图,无论如何都必须使用计数器。有一些方法可以使计数变得非常高效。

假设您的图像是一个 cv::Mat 变量 im,大小为 1x630,类型为 CV_8UC1,尝试:

std::vector<int> counts(36, 0);
for (int c = 0; c < 630; c++)
    counts.at(im.at<unsigned char>(1, c)) += 1;
std::cout << "Most frequently occuring value: " << std::max_element(counts);

这使用计数,但在普通 PC 上不会超过 0.1 毫秒。

关于opencv - OpenCv 中值数组的直方图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17547212/

相关文章:

python - 如何使用opencv python反转具有幅度的DFT

opencv - 重叠原始热图像和来自 FLIR 的嵌入图像

r - 选择函数内 ggplot2 直方图的类型(频率或密度)

c - 数组直方图主

python - 将图像 opencv c++ 发送到 python

node.js - 解码由 Python 编码的视频帧以显示在基于 Node 的 webapp 中

android - 关于图像格式 NV21 和它似乎具有的不同内存布局的混淆

python - 检测图像中的文本位置并在 Python 中裁剪它

matplotlib - 如何使用 matplotlib 在两条直方图线之间完成颜色填充?

python - 使用 OpenCV 捕获的显微镜图像的解码问题