Shader特效——“Floyd Steinberg 抖动” 的实现 【OpenCV】【GLSL】

算法参考自:

https://en.wikipedia.org/wiki/Floyd–Steinberg_dithering  (算法很简单,维基百科解释的相当精炼!)

http://blog.csdn.net/mathsoperator/article/details/7585898

 

OpenCV的效果图:

Shader特效——“Floyd Steinberg 抖动” 的实现 【OpenCV】【GLSL】_第1张图片

 

用OpenCV实现起来也是非常简单的!

如下所示:

 

uint8_t saturated_add(uint8_t val1, int8_t val2)
{
  int16_t val1_int = val1;
  int16_t val2_int = val2;
  int16_t tmp = val1_int + val2_int;

  if(tmp > 255)
  {
    return 255;
  }
  else if(tmp < 0)
  {   
    return 0;
  }
  else
  {
    return tmp;
  }
}

int main( int argc, char** argv )
{    
  Mat rawImg;
  Mat dithImg;
  int imgWidth;
  int imgHeight;
  uint8_t** imgPtr;

  if(argc != 2)
  {
    printf("> Usage: ./dithering [path_to_image]\n");
    return -1;
  }

  raw

你可能感兴趣的:(Shader,OpenCV,ShaderJoy,——,Shader,实例详解)