C++ 如何在扩展BMP的img中找到16种最常见的颜色 for(int-yy=0;yy

C++ 如何在扩展BMP的img中找到16种最常见的颜色 for(int-yy=0;yy,c++,graphics,sdl,C++,Graphics,Sdl,如果你有一个4x4 img,它会很简单。 同样地,简化每个RGB级别(0-255x3)的直方图函数,期望每个“流行”颜色都在其中。将混乱排序到每个级别使用的前16位,再次期望它们是正确的。除非你有狂野的颜色旋转,否则没有其他。 第二次查看流行颜色是否确实存在。 最后,您可能希望将其分为“足够接近”的类别,JPEG会有损于一个错误,4个RGB变化范围内的任何内容都会被分组在一起,将0-256值减少到0-64,除非颜色变化很大。如果您使用过绘画程序magic wand,您知道容差=0会犯超级错误,这

如果你有一个4x4 img,它会很简单。 同样地,简化每个RGB级别(0-255x3)的直方图函数,期望每个“流行”颜色都在其中。将混乱排序到每个级别使用的前16位,再次期望它们是正确的。除非你有狂野的颜色旋转,否则没有其他。 第二次查看流行颜色是否确实存在。 最后,您可能希望将其分为“足够接近”的类别,JPEG会有损于一个错误,4个RGB变化范围内的任何内容都会被分组在一起,将0-256值减少到0-64,除非颜色变化很大。如果您使用过绘画程序magic wand,您知道容差=0会犯超级错误,这一想法是一样的。 中值滤波器。通过合并成一个平均杂乱的颜色,采样一个3x3,4x4的圆形加权采样区域,它肯定会减少颜色计数

如果所有这些都失败了,偷取256色安全的web调色板,然后从那里开始工作


SWAG Scientific Wild Ass Guess method,祝你好运。

发布你编写的代码。即使它不起作用,它也将帮助我们准确理解你想做什么,并帮助我们给出更好的答案,因为我们将看到你作为程序员的能力。如果没有更多信息,这个问题将被解决。明显的错误单条信息是图像的格式以及您从中提取颜色信息的方式。您是在读取24bpp数据还是一张苍白的8bpp图像?如果是前者,您是在寻找精确匹配还是允许一些公差?如果允许一些公差,则这是k-means算法的典型用法。它给出了“k”顶部颜色,并告诉您哪些像素接近哪种颜色。
for(int yy=0; yy<height/2; yy++)
{
  SDL_Color kolor = getPixel(xx,yy); //we are gettig each pixel in img;

 setPixel(xx+width/2,yy+height/2,kolor.r,kolor.g,kolor.b );


 //setPixel(xx,yy+height/2,kolor.r,kolor.g,kolor.b);


 //setPixel(xx+width/2,yy,kolor.r,kolor.g,kolor.b);





}