Nejprve si načteme potřebné moduly pro python. Pokud je nemáte nainstalované tak je lze doinstalovat snadno v ubuntu příkazem.
sudo apt-get install python-opencv
V případě, že nemáte opencv obsažené ve vašich repozitářích distribuce, tak doporučuji se podívat na návod pro kompilaci Kompilace opencv na ubuntu 9.10 (10.4) .
Tak a teď se podíváme jak pracovat s opencv. Python je objektový jazyk a tak toho využijime k vytvoření třídy, která nám bude obstarávat hlavní smyčku:
class Main: def __init__(self): cv.NamedWindow("Obrazek", cv.CV_WINDOW_AUTOSIZE) def repeat(self): return False while Main().repeat(): pass
Tato třída nám umožní se do nekočna cyklit, dokud ji nedáme příkaz k ukončení návratou hodnotou False. Do konstruktoru této třídy si vložíme kod pro načtení obrázku, ten se nám inicialituje pouze jednou.
try: self.Img = cv.LoadImage("Lenna.png") except: print("Chyba: soubor se nepodařilo načíst")
Nyní už máme obrázek načtený, stačí nám jej jen zobrazit. V konstruktoru máme nadefinované první okno "Obrazek", do kterého jej zobrazíme. Aby se nám cyklus neukončil hned po zobrazení obrázku, nastavíme návratovou hodnotou na True. Tak donutíme hlavní cyklus ke smyčce
cv.ShowImage("Obrazek",self.Img) key = highgui.cvWaitKey(-1)
Ještě obsloužíme stisky kláves. K tomu nám poslouží funkce cvWaitKey, která navrací hodnotu stisknuté klávesy. Je možné ji využít jako časovat, kde její první parametr určuje počet milisekund. To ale v naší situaci nevyužijeme a tak jej nastavíme na -1. Záporná hodnota nám určuje, že nás funkce pustí dále jen v případě, že uživatel stiskne klávesu. Ukončení programu přidáme na klávesu "q" a ke klávese "s" si přiráme přeuložení obrázku.
if key == "q": return False if key == "s": print("Save image .. ") cv.SaveImage("image.jpg", self.Img) return True
Celý kod vypadá následovně:
#!/bin/bash # coding:utf-8 try: import cv from opencv import highgui except: print("Není nainstalované python-cv") exit(0) class Main: def __init__(self): try: self.Img = cv.LoadImage("Lenna.png") except: print("Chyba: soubor se nepodařilo načíst") cv.NamedWindow("Obrazek", cv.CV_WINDOW_AUTOSIZE) def repeat(self): cv.ShowImage("Obrazek",self.Img) key = highgui.cvWaitKey(-1) if key == "q": return False if key == "s": print("Save image .. ") cv.SaveImage("image.jpg", self.Img) return True while Main().repeat(): pass