我有一个包含 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/