我有630个值的矩阵(值范围从0-35)...

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

..谢谢!

最佳答案

您可以使用大小为1xN的Mat的calcHist,在这种情况下,N为630。

我不明白您反对柜台的说法。要构建直方图,无论如何都必须使用计数器。有多种方法可以使计数非常有效。



假设您的图片是大小为im的cv::Mat变量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.1ms。

10-08 02:01