Exemple #1
0
bool	check_side(int *ray, int i)
{
  if (ray[0] < 60 || ray[31] < 60)
    {
      if (i <= 15)
	back_left();
      else
	back_right();
    }
  if (ray[0] < 100)
    return (turning_left());
  else if (ray[31] < 100)
    return (turning_right());
  return (false);
}
const QImage& ImageTransformer::
SobelTransform()
{
    QImage NewImage(_DataHandled.size(),_DataHandled.format());

    int width = NewImage.width();
    int height = NewImage.height();
    int depth = NewImage.depth();

    if(depth == 32)
    {
        for(int i=1;i<width-1;++i)
        {
            for(int j=1;j<height-1;++j)
            {
                /*O O O
                 *O X O
                 *O O O
                 */
                QColor front_left(_DataHandled.pixel(i-1,j-1));
                QColor front(_DataHandled.pixel(i,j-1));
                QColor front_right(_DataHandled.pixel(i-1,j+1));

                QColor left(_DataHandled.pixel(i-1,j));
                QColor right(_DataHandled.pixel(i+1,j));

                QColor back_left(_DataHandled.pixel(i-1,j+1));
                QColor back(_DataHandled.pixel(i,j+1));
                QColor back_right(_DataHandled.pixel(i+1,j+1));

                int red_x = (front_left.red()+2*front.red()+front_right.red()) -
                        (back_left.red() +2*back.red() + back_right.red());
                int green_x = (front_left.green()+2*front.green()+front_right.green()) -
                        (back_left.green() +2*back.green() + back_right.green());
                int blue_x = (front_left.blue()+2*front.blue()+front_right.blue()) -
                        (back_left.blue() +2*back.blue() + back_right.blue());

                int red_y = (front_left.red()+2*left.red()+back_left.red())-
                        (front_right.red() +2*right.red()+back_right.red());
                int green_y = (front_left.green()+2*left.green()+back_left.green())-
                        (front_right.green() +2*right.green()+back_right.green());
                int blue_y = (front_left.blue()+2*left.blue()+back_left.blue())-
                        (front_right.blue() +2*right.blue()+back_right.blue());

                int red = static_cast<int>(round(sqrt(pow(red_x,2)+pow(red_y,2))));
                int green = static_cast<int>(round(sqrt(pow(green_x,2)+pow(green_y,2))));
                int blue = static_cast<int>(round(sqrt(pow(blue_x,2)+pow(blue_y,2))));

                red = (red > 255)? 255:red;
                green = (green > 255)? 255:green;
                blue = (blue > 255)? 255:blue;

                red = (red < 0)? 0:red;
                green = (green < 0)? 0:green;
                blue = (blue < 0)? 0:blue;

                NewImage.setPixel(i,j,QColor(red,green,blue).rgb());
            }
        }
        _DataHandled = NewImage;
    }
    return _DataHandled;
}