如何以最快的方式使用OpenCV(+ C++)减少图像中不同颜色的数量?我不想要完整的代码.我已经使用kmeans做了它,但它不是很快.这是我的代码的一部分很慢:
kmeans(samples, clusterCount, labels,
TermCriteria(TermCriteria::EPS + TermCriteria::COUNT, 10, 10.0),
1, KMEANS_RANDOM_CENTERS, centers);
Run Code Online (Sandbox Code Playgroud)
这段代码需要几秒钟来处理,这对我来说非常慢.我正在使用Matlab这个(rgb2ind)很快.差不多0.01秒.
我希望将我的代码用于生产,用户希望程序能够快速生成.
有没有替代kmeans颜色量化?有没有办法更快地运行kmeans(我不这么认为,因为我尝试了很多不同的参数)?
编辑:
变成颜色量化是一个非常复杂的主题,需要时间来编写一个优秀的优化.我决定用Magick++ (ImageMagick API)它.
因此我没有尝试过Cris Luengo的新(编辑)答案.但我将其标记为答案(也请查看评论),以便其他人不认为这个问题没有得到解答.
我想将下面的结构存储在磁盘中,并能够再次读取它:(C ++)
struct pixels {
std::vector<cv::Point> indexes;
cv::Mat values;
};
Run Code Online (Sandbox Code Playgroud)
我尝试使用ofstream,ifstream但是它们需要变量的大小,在这种情况下我真的不知道该如何计算。这不是具有一些int和double的简单结构。有什么办法可以用C ++做到这一点,最好不要使用任何第三方库。
(我实际上是来自该Matlab语言。使用save:可以很容易地用该语言进行操作save(filename, variables)。)
编辑:
我刚刚尝试了Boost序列化。不幸的是,我使用它的速度很慢。