Sprite detection package
Project description
Sprite Detection
Features
- <input type="checkbox" checked="" disabled="" /> Find the Most Common Color in an Image.
- <input type="checkbox" checked="" disabled="" /> Find Sprites in an Image.
- <input type="checkbox" checked="" disabled="" /> Draw Sprite Label Bounding Boxes.
Why this project is useful?
- Used reasonable library for process Image.
- Can be used on a big image.
- Easy to understand.
Usage
- Find the Most Common Color in an Image
>>> from PIL import Image # JPEG image >>> image = Image.open('first_image.jpg') >>> image.mode 'RGB' >>> find_most_common_color(image) (0, 221, 204) # PNG image >>> image = Image.open('second_image.png') >>> image.mode 'RGBA' >>> find_most_common_color(image) (0, 0, 0, 0) # Grayscale image >>> image = image.convert('L') >>> image.mode 'L' >>> find_most_common_color(image) 0
- Find Sprites in an Image.
>>> from PIL import Image >>> image = Image.open('metal_slug_single_sprite.png') >>> sprites, label_map = find_sprites(image, background_color=(255, 255, 255)) >>> len(sprites) 1 >>> for label, sprite in sprites.items(): ... print(f"Sprite ({label}): [{sprite.top_left}, {sprite.bottom_right}] {sprite.width}x{sprite.height}") Sprite (1): [(0, 0), (29, 37)] 30x38 >>> import pprint >>> pprint.pprint(label_map, width=120) [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0], [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0], [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1], [0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,1,1,0,0], [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0], [0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [0,0,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0], [0,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0], [1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0]]
Other example with the following image:
>>> from PIL import Image >>> image = Image.open('optimized_sprite_sheet.png') >>> sprites, label_map = find_sprites(image) >>> len(sprites) 22 >>> for label, sprite in sprites.items(): ... print(f"Sprite ({label}): [{sprite.top_left}, {sprite.bottom_right}] {sprite.width}x{sprite.height}") Sprite (25): [(383, 1), (455, 102)] 73x102 Sprite (43): [(9, 2), (97, 122)] 89x121 Sprite (26): [(110, 4), (195, 123)] 86x120 Sprite (46): [(207, 4), (291, 123)] 85x120 Sprite (16): [(305, 8), (379, 123)] 75x116 Sprite (53): [(349, 125), (431, 229)] 83x105 Sprite (61): [(285, 126), (330, 181)] 46x56 Sprite (100): [(1, 129), (101, 237)] 101x109 Sprite (106): [(106, 129), (193, 249)] 88x121 Sprite (93): [(183, 137), (278, 241)] 96x105 Sprite (95): [(268, 173), (355, 261)] 88x89 Sprite (178): [(6, 244), (101, 348)] 96x105 Sprite (185): [(145, 247), (245, 355)] 101x109 Sprite (141): [(343, 257), (417, 372)] 75x116 Sprite (169): [(102, 262), (142, 303)] 41x42 Sprite (188): [(249, 267), (344, 373)] 96x107 Sprite (192): [(412, 337), (448, 372)] 37x36 Sprite (256): [(89, 353), (184, 459)] 96x107 Sprite (234): [(11, 356), (104, 461)] 94x106 Sprite (207): [(188, 358), (281, 463)] 94x106 Sprite (229): [(384, 374), (456, 475)] 73x102 Sprite (248): [(286, 378), (368, 482)] 83x105
- Draw Sprite Label Bounding Boxes.
>>> from PIL import Image >>> image = Image.open('optimized_sprite_sheet.png') >>> sprites, label_map = find_sprites(image) >>> # Draw sprite masks and bounding boxes with the default white background color. >>> sprite_label_image = create_sprite_labels_image(sprites, label_map) >>> sprite_label_image.save('optimized_sprite_sheet_bounding_box_white_background.png') >>> # Draw sprite masks and bounding boxes with a transparent background color. >>> sprite_label_image = create_sprite_labels_image(sprites, label_map, background_color=(0, 0, 0, 0)) >>> sprite_label_image.save('optimized_sprite_sheet_bounding_box_transparent_background.png')
Sprite Masks with White Background | Sprite Masks with Transparent Background |
---|---|
Built with
Authors
- Le Quang Nhat (masternhat) - Intek student - Developer
Pull requests welcome!
Spotted an error? Something doesn't make sense? Send me a pull request!
Support
Ask your question here: https://www.google.com/
Everyone can Maintains && Contributing
Just follow steps:
- Fork it (https://github.com/intek-training-jsc/sprite-detection-masternhat.git)
- Create your feature branch (
git checkout -b feature/fooBar
) - Commit your changes (
git commit -am 'Add some fooBar'
) - Push to the branch (
git push origin feature/fooBar
) - Create a new Pull Request
License
This project is licensed under the MIT License - see the LICENSE.md file for details
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Filename, size | File type | Python version | Upload date | Hashes |
---|---|---|---|---|
Filename, size spriteutil_masternhat-1.0.1-py3-none-any.whl (11.7 kB) | File type Wheel | Python version py3 | Upload date | Hashes View |
Filename, size spriteutil_masternhat-1.0.1.tar.gz (7.8 kB) | File type Source | Python version None | Upload date | Hashes View |
Close
Hashes for spriteutil_masternhat-1.0.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 83c60fb20fefbc2d818de138dc221de0d9605f705b8aeaa14e0b6b92d68e7fc3 |
|
MD5 | 0371a335c09fe8d604e00b3f6ada6279 |
|
BLAKE2-256 | 99d3998e1973d94b1714a22c439e3ea2577ba57ac366100767da8b521070777e |
Close
Hashes for spriteutil_masternhat-1.0.1.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 8258c624207491842718cd3a09b2bb385f690f04332aece13da9d1ead0699a1a |
|
MD5 | 6289935180b62f8c151f118477ff4c11 |
|
BLAKE2-256 | 6b3fefc508213e84070a2ce9fa4fa6287c9edb6f32ade4b69c0205aeec370f8e |