Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.93 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <iostream>
  3.  
  4. const int WIDTH = 640;
  5. const int HEIGHT = 480;
  6.  
  7. sf::Image blackWhite(sf::Image& image)
  8. {
  9. int width = image.getSize().x;
  10. int height = image.getSize().y;
  11. const sf::Uint8* pixels = image.getPixelsPtr();
  12. sf::Uint8* newPixels = new sf::Uint8[width * height * 4];
  13.  
  14. for (int i = 0; i < width*height*4; i+=4)
  15. {
  16. int red = pixels[i];
  17. int green = pixels[i+1];
  18. int blue = pixels[i+2];
  19.  
  20. int val = (red + green + blue) / 3;
  21. newPixels[i] = val;
  22. newPixels[i + 1] = val;
  23. newPixels[i + 2] = val;
  24. newPixels[i + 3] = 255;
  25. }
  26.  
  27. sf::Image result;
  28. result.create(width, height, newPixels);
  29.  
  30. return result;
  31. }
  32.  
  33. sf::Image boxFilter(sf::Image& image, double kernel[])
  34. {
  35. int width = image.getSize().x;
  36. int height = image.getSize().y;
  37. const sf::Uint8* pixels = image.getPixelsPtr();
  38. sf::Uint8* newPixels = new sf::Uint8[(width-2) * (height-2) * 4];
  39.  
  40. int c = 0;
  41. for (int j = 1; j < height-1; ++j)
  42. {
  43. for (int i = 1; i < width-1; ++i)
  44. {
  45. double r = 0;
  46. 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];
  47. r += pixels[4 * (j * width + i - 1)] * kernel[3] + pixels[4 * (j * width + i)] * kernel[4] + pixels[4 * (j * width + i + 1)] * kernel[5];
  48. 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];
  49.  
  50. double g = 0;
  51. 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];
  52. 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];
  53. 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];
  54.  
  55. double b = 0;
  56. 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];
  57. 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];
  58. 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];
  59.  
  60. newPixels[c] = (int)r;
  61. newPixels[c + 1] = (int)g;
  62. newPixels[c + 2] = (int)b;
  63. newPixels[c + 3] = 255;
  64. c += 4;
  65. }
  66. }
  67.  
  68. sf::Image result;
  69. result.create(width-2, height-2, newPixels);
  70.  
  71. return result;
  72. }
  73.  
  74. int main()
  75. {
  76. sf::RenderWindow window(sf::VideoMode(WIDTH, HEIGHT), "Machine Vision");
  77.  
  78. sf::Image image;
  79. image.loadFromFile("trump.jpg");
  80. sf::Texture texture;
  81. texture.loadFromImage(image);
  82. sf::Sprite sprite;
  83. sprite.setTexture(texture);
  84.  
  85. while (window.isOpen())
  86. {
  87. sf::Event event;
  88. while (window.pollEvent(event))
  89. {
  90. if (event.type == sf::Event::Closed)
  91. window.close();
  92.  
  93. if (event.type == sf::Event::KeyPressed)
  94. {
  95. if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num0))
  96. {
  97. image.loadFromFile("trump.jpg");
  98. texture.update(image);
  99. }
  100.  
  101. if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num1))
  102. {
  103. image = blackWhite(image);
  104. texture.update(image);
  105. }
  106.  
  107. if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num2))
  108. {
  109. 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 };
  110. image = boxFilter(image, kernel);
  111. texture.update(image);
  112. }
  113.  
  114. if (sf::Keyboard::isKeyPressed(sf::Keyboard::Num3))
  115. {
  116. double kernel[9] = { 1, 2, 1, 0, 0, 0, -1, -2, -1 };
  117. image = boxFilter(image, kernel);
  118. texture.update(image);
  119. }
  120. }
  121. }
  122.  
  123. window.clear();
  124. window.draw(sprite);
  125. window.display();
  126. }
  127.  
  128. return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement