Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <SFML/Graphics.hpp>
- #include <iostream>
- const int WIDTH = 640;
- const int HEIGHT = 480;
- sf::Image blackWhite(sf::Image& image)
- {
- int width = image.getSize().x;
- int height = image.getSize().y;
- const sf::Uint8* pixels = image.getPixelsPtr();
- sf::Uint8* newPixels = new sf::Uint8[width * height * 4];
- for (int i = 0; i < width*height*4; i+=4)
- {
- int red = pixels[i];
- int green = pixels[i+1];
- int blue = pixels[i+2];
- int val = (red + green + blue) / 3;
- newPixels[i] = val;
- newPixels[i + 1] = val;
- newPixels[i + 2] = val;
- newPixels[i + 3] = 255;
- }
- sf::Image result;
- result.create(width, height, newPixels);
- return result;
- }
- sf::Image boxFilter(sf::Image& image, double kernel[])
- {
- int width = image.getSize().x;
- int height = image.getSize().y;
- const sf::Uint8* pixels = image.getPixelsPtr();
- sf::Uint8* newPixels = new sf::Uint8[(width-2) * (height-2) * 4];
- int c = 0;
- for (int j = 1; j < height-1; ++j)
- {
- for (int i = 1; i < width-1; ++i)
- {
- double r = 0;
- r += pixels[4 * ((j - 1) * width + i - 1)] * kernel[0] + pixels[4 * ((j - 1) * width + i)] * kernel[1] + pixels[4 * ((j - 1) * width + i + 1)] * kernel[2];
- r += pixels[4 * (j * width + i - 1)] * kernel[3] + pixels[4 * (j * width + i)] * kernel[4] + pixels[4 * (j * width + i + 1)] * kernel[5];
- r += pixels[4 * ((j + 1) * width + i - 1)] * kernel[6] + pixels[4 * ((j + 1) * width + i)] * kernel[7] + pixels[4 * ((j + 1) * width + i + 1)] * kernel[8];
- double g = 0;
- g += pixels[4 * ((j - 1) * width + i - 1)+1] * kernel[0] + pixels[4 * ((j - 1) * width + i)+1] * kernel[1] + pixels[4 * ((j - 1) * width + i + 1)+1] * kernel[2];
- g += pixels[4 * (j * width + i - 1)+1] * kernel[3] + pixels[4 * (j * width + i)+1] * kernel[4] + pixels[4 * (j * width + i + 1)+1] * kernel[5];
- g += pixels[4 * ((j + 1) * width + i - 1)+1] * kernel[6] + pixels[4 * ((j + 1) * width + i)+1] * kernel[7] + pixels[4 * ((j + 1) * width + i + 1)+1] * kernel[8];
- double b = 0;
- b += pixels[4 * ((j - 1) * width + i - 1)+2] * kernel[0] + pixels[4 * ((j - 1) * width + i)+2] * kernel[1] + pixels[4 * ((j - 1) * width + i + 1)+2] * kernel[2];
- b += pixels[4 * (j * width + i - 1)+2] * kernel[3] + pixels[4 * (j * width + i)+2] * kernel[4] + pixels[4 * (j * width + i + 1)+2] * kernel[5];
- b += pixels[4 * ((j + 1) * width + i - 1)+2] * kernel[6] + pixels[4 * ((j + 1) * width + i)+2] * kernel[7] + pixels[4 * ((j + 1) * width + i + 1)+2] * kernel[8];
- newPixels[c] = (int)r;
- newPixels[c + 1] = (int)g;
- newPixels[c + 2] = (int)b;
- newPixels[c + 3] = 255;
- c += 4;
- }
- }
- sf::Image result;
- result.create(width-2, height-2, newPixels);
- return result;
- }
- int main()
- {
- sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Machine Vision");
- sf::Image image;
- image.loadFromFile("trump.jpg");
- sf::Texture texture;
- texture.loadFromImage(image);
- sf::Sprite sprite;
- sprite.setTexture(texture);
- while (window.isOpen())
- {
- sf::Event event;
- while (window.pollEvent(event))
- {
- if (event.type == sf::Event::Closed)
- window.close();
- if (event.type == sf::Event::KeyPressed)
- {
- if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num0))
- {
- image.loadFromFile("trump.jpg");
- texture.update(image);
- }
- if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num1))
- {
- image = blackWhite(image);
- texture.update(image);
- }
- if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num2))
- {
- double kernel[9] = { 1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9,1.0 / 9 };
- image = boxFilter(image, kernel);
- texture.update(image);
- }
- if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num3))
- {
- double kernel[9] = { 1, 2, 1, 0, 0, 0, -1, -2, -1 };
- image = boxFilter(image, kernel);
- texture.update(image);
- }
- }
- }
- window.clear();
- window.draw(sprite);
- window.display();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement