TI/Programowanie dla Fizyków Medycznych:Zadania openCV

Z Brain-wiki

Instalacja Open CV

Dla potrzeb tego zadania każdy powinien stworzyć własne Virtual Enviorment (wirtualne środowisko).

Otwórz terminal. Wejdź do katalogu __work__ (jest w nim dużo miejsca, którego brakuje w Twoim katalogu domowym).

  • cd __work__

Wpisz komendy:

  • virtualenv -p python3 ve
  • source ve/bin/activate

(po tej komendzie powinno sie pojawic ve na poczatku)

  • pip install --upgrade pip
  • pip install opencv-python

Komendę source ve/bin/activate trzeba będzie wywołać za każdym razem, kiedy będziemy zaczynać pracę w tym wirtualnym środowisku. Wychodzi się z niego komendą:

  • deactivate

A spydera w terminalu uruchamia się komendą

  • spyder3

Podstawowe metody w Open CV

(Tutorial można znaleźć tu: OPENCV)

Wczytanie i wyświetlenie obrazka.

import cv2
import numpy as np
img = cv2.imread('obrazek.jpg', cv2.IMREAD_COLOR) 
#Uwaga! Nie RGB, tylko BGR
#jeśli ma być wczytane w skali szarości wpisz cv2.IMREAD_GRAYSCALE
#jeśli ma być wczytane w oryginalnej skali barw, to cv2.IMREAD_UNCHANGED
    
cv2.namedWindow('image', cv2.WINDOW_NORMAL) 
#ta linijka jest potrzebna, jeśli chcemy, by okienko było rozciągliwe

cv2.imshow('image',img)

k=cv2.waitKey(0) #czas czekania w ms, 0 - czekaj do skutku
print("Wcisnales:", k)
#Sprawdź, co zostanie wypisane, jeśli teraz zamkniesz okienko myszką

cv2.destroyAllWindows()

Na wszelki wypadek, aby zawsze została wykonana komenda zamykająca okienko, również w przypadku pojawienia się błędu w programie, warto użyć słów try: i finally:

import cv2
import numpy as np
try:
    img = cv2.imread('obrazek.jpg',cv2.IMREAD_COLOR)
    cv2.imshow('image',img)
    k=cv2.waitKey(0)
finally:
    cv2.destroyAllWindows()

Sprawdź, jakiego typu obiektem jest img?

Rysowanie

import cv2
import numpy as np
try:
    img = np.zeros([512, 512,3])
    cv2.imshow('image',img)
    k=cv2.waitKey(0)
    cv2.line(img,(0,0),(511,511),(255,0,0),1)
    #tablica, poczatek, koniec, kolor, grubosc
    cv2.imshow('image',img)
    k=cv2.waitKey(0)
    
    img = cv2.rectangle(img,(20,20),(50,100),(0,255,0),3)
    #tablica, jeden rog, przeciwlegly rog, kolor, grubosc linii
    cv2.imshow('image',img)
    k=cv2.waitKey(0)

    font = cv2.FONT_HERSHEY_SIMPLEX
    cv2.putText(img,'OpenCV',(0,100), font, 0.5,(255,255,255),1,cv2.LINE_AA)
    #tablica, tekst, polozenie, font, wielkosc, kolor, grubosc linii, typ linii
    cv2.imshow('image',img)
    
    k=cv2.waitKey(0)
finally:
    cv2.destroyAllWindows()

Zadanko na próbę

Napisz pętlę, w której za pomocą klawiszy będzie się zmieniało położenie i wielkość napisu, tak długo aż nie zostanie wciśnięty ENTER lub myszką zamknięte okno.

Zadanie

Obiekt: trójkąt

Zdefiniuj klasę opisującą trójkąt. Powinna mieć następujące pola:

  • Współrzędne wierzchołków względem punktu odniesienia
  • Współrzędne punktu odniesienia na obrazie

Powinna zawierać następujące metody:

  • Konstruktor __init__, któremu jako parametry przekazywane jest początkowe położenie punktu odniesienia i wierzchołków
  • Narysowanie trójkąta na obrazie przekazanym jako parametr
  • Sprawdzenie, czy punkt o danych współrzędnych znajduje się wewnątrz trójkąta
  • Zmiana położenia (translacja) punktu odniesienia
  • Obrót trójkąta wokół punktu odniesienia o zadany kąt