我有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。