Skip to content

Instantly share code, notes, and snippets.

@GeneralistDev
Created June 9, 2020 15:39
Show Gist options
  • Select an option

  • Save GeneralistDev/c588f5b88fb0c36b46a3e3f456c4872c to your computer and use it in GitHub Desktop.

Select an option

Save GeneralistDev/c588f5b88fb0c36b46a3e3f456c4872c to your computer and use it in GitHub Desktop.
Approach 2 with color visualization window
import sys # System bindings
import cv2 # OpenCV bindings
import numpy as np
from PIL import Image
from collections import Counter
class ColorRenderer():
def __init__(self, rgb):
self.rgb = rgb
def render(self):
w, h = 512, 512
data = np.zeros((h, w, 3), dtype=np.uint8)
r, g, b = self.rgb
data[0:512, 0:512] = [r, g, b]
img = Image.fromarray(data, 'RGB')
img.show()
class BackgroundColorDetector():
def __init__(self, imageLoc):
self.img = cv2.imread(imageLoc, 1)
self.manual_count = {}
self.w, self.h, self.channels = self.img.shape
self.total_pixels = self.w*self.h
def count(self):
for y in range(0, self.h):
for x in range(0, self.w):
RGB = (self.img[x, y, 2], self.img[x, y, 1], self.img[x, y, 0])
if RGB in self.manual_count:
self.manual_count[RGB] += 1
else:
self.manual_count[RGB] = 1
def average_colour(self):
red = 0
green = 0
blue = 0
sample = 10
for top in range(0, sample):
red += self.number_counter[top][0][0]
green += self.number_counter[top][0][1]
blue += self.number_counter[top][0][2]
average_red = red / sample
average_green = green / sample
average_blue = blue / sample
print("Average RGB for top ten is: (", average_red,
", ", average_green, ", ", average_blue, ")")
return (average_red, average_green, average_blue)
def twenty_most_common(self):
self.count()
self.number_counter = Counter(self.manual_count).most_common(20)
for rgb, value in self.number_counter:
print(rgb, value, ((float(value)/self.total_pixels)*100))
def detect(self):
self.twenty_most_common()
self.percentage_of_first = (
float(self.number_counter[0][1])/self.total_pixels)
print(self.percentage_of_first)
if self.percentage_of_first > 0.5:
print("Background color is ", self.number_counter[0][0])
return self.number_counter[0][0]
else:
return self.average_colour()
if __name__ == "__main__":
if (len(sys.argv) != 2): # Checks if image was given as cli argument
print("error: syntax is 'python main.py /example/image/location.jpg'")
else:
BackgroundColor = BackgroundColorDetector(sys.argv[1])
average_color = BackgroundColor.detect()
print(average_color)
renderer = ColorRenderer(average_color)
renderer.render()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment