Files
@ d954258c9613
Branch filter:
Location: OneEye/exp/color_sampler.py - annotation
d954258c9613
3.0 KiB
text/x-python
color sampler extended to mark corners
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 | d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 d954258c9613 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 d954258c9613 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 d954258c9613 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 9df0d1a019c5 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 d954258c9613 9df0d1a019c5 9df0d1a019c5 | import sys
sys.path.append("../src")
import os
import tkinter as tk
from tkinter import LEFT,X,N,S,E,W
from colorsys import rgb_to_hsv
from PIL import Image,ImageTk
from analyzer.corners import Corners
class Sampler:
def __init__(self):
self.dirname="../images"
self.filenames=[f for f in os.listdir(self.dirname) if f.endswith(".jpg")]
self.k=0
self.img=None
self.photo=None
self.letter="_"
self.hsv=(0,0,0)
self.pos=(0,0)
self.corners=Corners()
self._createGUI()
def sample(self,e):
try:
(r,g,b)=(x/255 for x in self.img.getpixel((e.x,e.y)))
except IndexError:
return
(h,s,v)=map(lambda x: round(x,3), rgb_to_hsv(r,g,b))
self.hsv=(h,s,v)
self.pos=(e.x,e.y)
self.posLabel.configure(text="({0},{1})".format(e.x,e.y))
self.colorLabel.configure(text="HSV: ({0}, {1}, {2})".format(round(h*360),s,v))
def printSample(self):
print("\t".join(map(str, (self.filenames[self.k],*self.pos,self.letter,*self.hsv))))
def showImage(self):
self.img=Image.open(os.path.join(self.dirname,self.filenames[self.k]))
(w,h)=self.img.size
self.photo=ImageTk.PhotoImage(self.img)
self.canvas.delete("all")
self.canvas.create_image(0,0,image=self.photo,anchor="nw")
self.canvas.configure(width=w,height=h)
def switchImage(self,step):
n=len(self.filenames)
self.k=(self.k+step+n)%n
self.showImage()
def setLetter(self,c):
self.letter=c
self.letterLabel.configure(text="Letter: {0}".format(c))
def addCorner(self,e):
self.corners.add(e.x,e.y)
self._markCorners()
def _createGUI(self):
root=tk.Tk()
frame=tk.Frame(root)
frame.grid(column=0,row=0,sticky=(N,S,E,W))
self.canvas=tk.Canvas(frame)
self.canvas.grid(row=1,column=0)
bar=self._createBar(frame)
bar.grid(row=2,column=0,sticky=(E,W))
self.showImage()
self.canvas.bind('<1>',lambda e: self.printSample())
self.canvas.bind('<3>',self.addCorner)
self.canvas.bind("<Motion>",self.sample)
root.bind("<Left>",lambda e: self.switchImage(-1))
root.bind("<Right>",lambda e: self.switchImage(1))
root.bind("<b>",lambda e: self.setLetter("b"))
root.bind("<e>",lambda e: self.setLetter("e"))
root.bind("<w>",lambda e: self.setLetter("w"))
root.mainloop()
def _createBar(self,frame):
bar=tk.Frame(frame,height=20,borderwidth=1,relief="sunken")
self.letterLabel=tk.Label(bar,width=8,text="Letter: _")
self.letterLabel.pack(side=LEFT)
self.posLabel=tk.Label(bar,width=16,text="(,)")
self.posLabel.pack(side=LEFT)
self.colorLabel=tk.Label(bar,width=20,text="HSV: (,,)")
self.colorLabel.pack(side=LEFT)
return bar
def _markCorners(self):
self.canvas.delete("mark")
for c in self.corners:
(x,y)=(c.x,c.y)
self.canvas.create_oval(x-2,y-2,x+2,y+2,fill="#00ff00",tags="mark")
if self.corners.canonizeOrder():
(a,b,c,d)=self.corners
self.canvas.create_line(a.x,a.y,b.x,b.y,fill="#00ff00",tags="mark")
self.canvas.create_line(b.x,b.y,c.x,c.y,fill="#00ff00",tags="mark")
self.canvas.create_line(c.x,c.y,d.x,d.y,fill="#00ff00",tags="mark")
self.canvas.create_line(d.x,d.y,a.x,a.y,fill="#00ff00",tags="mark")
s=Sampler()
|