Package: test-10
Sprite DetectionFeaturesFind the Most Common Color in an Image.Find Sprites in an Image.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.UsageFind the Most Common Color in an Image>>>fromPILimportImage# 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)0Find Sprites in an Image.>>>fromPILimportImage>>>image=Image.open('metal_slug_single_sprite.png')>>>sprites,label_map=find_sprites(image,background_color=(255,255,255))>>>len(sprites)1>>>forlabel,spriteinsprites.items():...print(f"Sprite ({label}): [{sprite.top_left},{sprite.bottom_right}]{sprite.width}x{sprite.height}")Sprite(1):[(0,0),(29,37)]30x38>>>importpprint>>>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:>>>fromPILimportImage>>>image=Image.open('optimized_sprite_sheet.png')>>>sprites,label_map=find_sprites(image)>>>len(sprites)22>>>forlabel,spriteinsprites.items():...print(f"Sprite ({label}): [{sprite.top_left},{sprite.bottom_right}]{sprite.width}x{sprite.height}")Sprite(25):[(383,1),(455,102)]73x102Sprite(43):[(9,2),(97,122)]89x121Sprite(26):[(110,4),(195,123)]86x120Sprite(46):[(207,4),(291,123)]85x120Sprite(16):[(305,8),(379,123)]75x116Sprite(53):[(349,125),(431,229)]83x105Sprite(61):[(285,126),(330,181)]46x56Sprite(100):[(1,129),(101,237)]101x109Sprite(106):[(106,129),(193,249)]88x121Sprite(93):[(183,137),(278,241)]96x105Sprite(95):[(268,173),(355,261)]88x89Sprite(178):[(6,244),(101,348)]96x105Sprite(185):[(145,247),(245,355)]101x109Sprite(141):[(343,257),(417,372)]75x116Sprite(169):[(102,262),(142,303)]41x42Sprite(188):[(249,267),(344,373)]96x107Sprite(192):[(412,337),(448,372)]37x36Sprite(256):[(89,353),(184,459)]96x107Sprite(234):[(11,356),(104,461)]94x106Sprite(207):[(188,358),(281,463)]94x106Sprite(229):[(384,374),(456,475)]73x102Sprite(248):[(286,378),(368,482)]83x105Draw Sprite Label Bounding Boxes.>>>fromPILimportImage>>>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 BackgroundSprite Masks with Transparent BackgroundBuilt withPillowNumpyPull requests welcome!Spotted an error? Something doesn't make sense? Send me apull
request!SupportAsk your question here:https://www.google.com/Everyone can Maintains && ContributingJust 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 RequestLicenseThis project is licensed under the MIT License - see theLICENSE.mdfile for details