lab4.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. from PIL import Image # Python Imaging Library
  2. import numpy as np
  3. # obrazy w odcieniach szarości
  4. def rysuj_ramke_szare(w, h, dzielnik, kolor):
  5. t = (h, w) # rozmiar tablicy
  6. tab = np.ones(t, dtype=np.uint8) # deklaracja tablicy
  7. tab[:] = 100 # wypełnienie tablicy szarym kolorem o wartości 100
  8. grub = int(min(w, h) / dzielnik) # wyznaczenie grubości ramki
  9. z1 = h - grub
  10. z2 = w - grub
  11. tab[grub:z1, grub:z2] = kolor # wypełnienie tablicy kolorem o wartości kolor
  12. return tab
  13. tab = rysuj_ramke_szare(120, 60, 8, 200)
  14. im_ramka = Image.fromarray(tab)
  15. im_ramka.show()
  16. def rysuj_pasy_poziome_szare(w, h, dzielnik, zmiana_koloru): # w, h - rozmiar obrazu
  17. t = (h, w) # rozmiar tablicy
  18. tab = np.ones(t, dtype=np.uint8)
  19. grub = int(h / dzielnik) # liczba pasów = 9 o grubości 10
  20. for k in range(dzielnik): # uwaga k = 0,1,2,3,4,5,8 bez dziewiatki
  21. for g in range(grub):
  22. i = k * grub + g # i - indeks wiersza, j - indeks kolumny
  23. for j in range(w):
  24. tab[i, j] = (k * zmiana_koloru) % 256 # reszta z dzielenia przez dwa
  25. return tab
  26. tab1 = rysuj_pasy_poziome_szare(300, 200, 100, 10)
  27. obraz1 = Image.fromarray(tab1)
  28. obraz1.show()
  29. def negatyw_szare(tab): # tworzy tablicę dla negatywu
  30. h, w = tab.shape
  31. tab_neg = tab.copy()
  32. for i in range(h):
  33. for j in range(w):
  34. tab_neg[i, j] = 255 - tab[i, j]
  35. return tab_neg
  36. tab_neg = negatyw_szare(tab1)
  37. obraz_neg = Image.fromarray(tab_neg)
  38. obraz_neg.show()
  39. def rysuj_po_przekatnej_szare(w): # rysuje kwadratowy obraz
  40. t = (w, w)
  41. tab = np.zeros(t, dtype=np.uint8)
  42. for i in range(w):
  43. for j in range(w):
  44. tab[i, j] = (i + j) % 256
  45. return tab
  46. tab = rysuj_po_przekatnej_szare(512)
  47. im = Image.fromarray(tab)
  48. im.show()
  49. def rysuj_ramki_szare(w):
  50. t = (w, w)
  51. tab = np.zeros(t, dtype=np.uint8)
  52. kolor = 255 - int(w / 2) + 1
  53. z = w
  54. for k in range(int(w / 2)):
  55. for i in range(k, z - k):
  56. for j in range(k, z - k):
  57. tab[i, j] = kolor
  58. kolor = kolor + 1
  59. return tab
  60. tab = rysuj_ramki_szare(300)
  61. im = Image.fromarray(tab)
  62. im.show()
  63. # obrazy kolorowe
  64. def rysuj_ramke_kolor(w, h, dzielnik, r, g, b):
  65. t = (h, w, 3) # rozmiar tablicy
  66. tab = np.ones(t, dtype=np.uint8) # deklaracja tablicy
  67. tab[:] = [255, 0, 0] # wypełnienie tablicy kolorem czerwonym
  68. grub = int(min(w, h) / dzielnik) # wyznaczenie grubości ramki
  69. z1 = h - grub
  70. z2 = w - grub
  71. tab[grub:z1, grub:z2, 0] = r # wypełnienie wartości kanału R liczbą r
  72. tab[grub:z1, grub:z2, 1] = g # wypełnienie wartości kanału G liczbą g
  73. tab[grub:z1, grub:z2, 2] = b # wypełnienie wartości kanału R liczbą r
  74. # tab[grub:z1, grub:z2] = [r,g,b] # wersja równoważna
  75. return tab
  76. tab = rysuj_ramke_kolor(120, 60, 8, 0, 200, 100)
  77. im_ramka = Image.fromarray(tab)
  78. im_ramka.show()
  79. def rysuj_pasy_poziome_3kolory(w, h, dzielnik): # funkcja rysuje pasy poziome na przemian czerwony, zielony, niebieski
  80. t = (h, w, 3) # rozmiar tablicy
  81. tab = np.ones(t, dtype=np.uint8)
  82. grub = int(h / dzielnik) # liczba pasów = 9 o grubości 10
  83. for k in range(dzielnik): # uwaga k = 0,1,2,3,4,5,8 bez dziewiatki
  84. for g in range(grub):
  85. i = k * grub + g
  86. for j in range(w):
  87. if k % 3 == 0:
  88. tab[i, j] = [255, 0, 0]
  89. elif k % 3 == 1:
  90. tab[i, j] = [0, 255, 0]
  91. else:
  92. tab[i, j] = [0, 0, 255]
  93. return tab
  94. tab1 = rysuj_pasy_poziome_3kolory(300, 200, 20)
  95. obraz1 = Image.fromarray(tab1)
  96. obraz1.show()
  97. def rysuj_pasy_poziome_kolor(w, h, dzielnik, kolor,
  98. zmiana_koloru): # funkcja rysuje pasy poziome, przy czym kazda składowa koloru zwieksza się o "zmiana_koloru"
  99. t = (h, w, 3) # rozmiar tablicy
  100. tab = np.ones(t, dtype=np.uint8)
  101. tab[:] = kolor
  102. grub = int(h / dzielnik)
  103. for k in range(dzielnik):
  104. r = (kolor[0] + k * zmiana_koloru) % 255
  105. g = (kolor[1] + k * zmiana_koloru) % 255
  106. b = (kolor[2] + k * zmiana_koloru) % 255
  107. for m in range(grub):
  108. i = k * grub + m
  109. for j in range(w):
  110. tab[i, j] = [r, g, b]
  111. return tab
  112. tab1 = rysuj_pasy_poziome_kolor(300, 200, 20, [100, 200, 0], 32)
  113. obraz1 = Image.fromarray(tab1)
  114. obraz1.show()