Şu koddaki hata nerededir

Ya bu kodda for döngümde bir hata var ama anlamadım, çözen olursa sevinirm.

import os
from PIL import Image
from pylab import *

goruntu = Image.open("res1.jpg")

def affine_transform(goruntu, scale=(1,1),kayma=(0,0),donme=0, translate=(0,0), aynalama=(1,1)):
    k_x, k_y = kayma
    tx, ty = translate
    ax, ay = aynalama
    theta = donme
    sx, sy = scale
#affine_transform foksiyonu ile görüntü değişkeni ile bir görüntü gönderilerek
#scale değişkeni ile x ve y yönünde ölçeklendirme faktör değerlerini ifade
#etmektedir.
#Kayma değişkeni ise x ve y eksenindeki kayma değerlerini ifade etmektedir.
#Dönme değişkeni ise açısal olarak saat yönünün tersindeki dönme açısını
#ifade etmektedir.

x_kayma_matris = matrix([[1, k_x, 0], [0,1,0], [0,0,1]])
y_kayma_matris = matrix([[1, 0, 0], [k_y,1,0], [0,0,1]])
donme_matris= matrix([[cos(theta), -sin(theta), 0], [sin(theta),cos(theta),0], [0,0,1]])
scale_matris = matrix([[sx, 0, 0], [0,sy,0], [0,0,1]])
aynalama_matris = matrix([[ax, 0, 0], [0,ay,0], [0,0,1]])
oteleme = matrix([[1, 0, tx], [0,1,ty], [0,0,1]])
#x_kayma_matrisi x ekseni boyunca kayma işlemi için kullanılmaktadır.
#Matrisdeki değerler k_x değişkenine, değerine göre, x ekseni boyunca kayma işlemini gerçekleştirmektedir.
#y_kayma_matrisi, y ekseni boyunca kayma işlemi için kullanılmaktadır.
#Matristeki değerler k_y değişkenine, değerine göre, y ekseni boyunca kayma işlemini gerçekleştirmektedir.
#dönme_matrisi dönme işlemlerinde kullanılan rotasyon matrisidir.
#scale_matrisi hem x hem de y eksenin ölçeklendirme için kullanılmaktadır.
#sx, x ekseninde sy ise y ekseninde büyültme/küçültme faktör değerleridir.
#aynalama_matrisi hem x hem de y ekseninde aynlaması için kullanılmaktadır.
#Öteleme ise, belirlenen mesafeye göre görüntü, x ve y eksenleri boyunca ötelenmektedir.

trans_matris = donme_matris*y_kayma_matris
trans_matris *= x_kayma_matris*scale_matris*aynalama_matris
trans_matris += oteleme
#Görüntü üzerinde gerçekleştirilmek istenen işlemleri tek bir dizi olarak birleştirmek için
#tüm matris değerleri çarpılmaktadır.

w, h = goruntu.size
#Görüntü boyutları w, h değişkenlerine aktarılır

once = []
x, y = [], []
once.append(array([[0, 0, 1]]).transpose())
once.append(array([[w-1, 0, 1]]).transpose())
once.append(array([[0, h-1, 1]]).transpose())
once.append(array([[w-1, h-1, 1]]).transpose())
#Elde edilen trans_matrisi ile görüntünün orijinal boyutları çarpılması için ilk olarak
#trans_matrisine uygun hale getirilmesi için bir dizi oluşturulmaktadır.

for i in range(len(once)):
    sonra = trans_matris*once[i]
    x.append(sonra[0, 0])
    y.append(sonra[1, 0])
yeni_yukseklik = int(round(max(y)-min(y)))+1
yeni_genislik = int(round(max(x)-min(x)))+1
trans_matris = matrix([[1, 0, -min(x)], [0,1,-min(y)], [0,0,1]])*trans_matris
t_inv = linalg.inv(trans_matris)
    t_inv_tuple = (t_inv[0,0], t_inv[0,1], t_inv[0,2], t_inv[1,0], t_inv[1,1],t_inv[1,2])
    return t_inv_tuple, yeni_genislik, yeni_yukseklik

affine_tuple, ww, hh = affine_transform(görüntü, scale=(1.2, 1.2), kayma=(0, 0), dönme=pi/4, translate=(10, 10), aynalama=(-1,-1))

wp_goruntu = goruntu.transform((ww,hh), Image.AFFINE, affine_tuple)

imshow(wp_goruntu)
#affin dönüşümünde görüntünün boyutu değişmektedir. Yeni boyutları hesaplamak için trans_matrisiyle orijinal
#boyut kullanılarak gerçekleştirilmek için yukarıdaki döngü bloğu ile sağlanmıştır.


Kod paylaşımı sırasında gerekli boşluklar bırakılmamış ve renklendirilmemiş.Bu yüzden okunmuyor.

hatayı paylaşsan daha kolay yardımcı olunur

Burada renklendirmeyi nasıl yapacağım gencay?

kodların en baş satırına ve en son satırına ``` işaretini koymalısın. Bu işareti ALT GR + ; (noktalı virgül) tuşu ile yapabilirsin. Daha sonra ışıklı mışıklı deli fişek oluyorlar.

Örneğin;

print("saygılarımı sunarım")

def oyloo():
    a = "bu bir fonksiyon mu?"
    print(a)
2 Beğeni
import os
from PIL import Image
from pylab import *

goruntu = Image.open(“res1.jpg”)

def affine_transform(goruntu, scale=(1,1),kayma=(0,0),donme=0, translate=(0,0), aynalama=(1,1)):
k_x, k_y = kayma
tx, ty = translate
ax, ay = aynalama
theta = donme
sx, sy = scale
#affine_transform foksiyonu ile görüntü değişkeni ile bir görüntü gönderilerek
#scale değişkeni ile x ve y yönünde ölçeklendirme faktör değerlerini ifade
#etmektedir.
#Kayma değişkeni ise x ve y eksenindeki kayma değerlerini ifade etmektedir.
#Dönme değişkeni ise açısal olarak saat yönünün tersindeki dönme açısını
#ifade etmektedir.

x_kayma_matris = matrix([[1, k_x, 0], [0,1,0], [0,0,1]])
y_kayma_matris = matrix([[1, 0, 0], [k_y,1,0], [0,0,1]])
donme_matris= matrix([[cos(theta), -sin(theta), 0], [sin(theta),cos(theta),0], [0,0,1]])
scale_matris = matrix([[sx, 0, 0], [0,sy,0], [0,0,1]])
aynalama_matris = matrix([[ax, 0, 0], [0,ay,0], [0,0,1]])
oteleme = matrix([[1, 0, tx], [0,1,ty], [0,0,1]])
#x_kayma_matrisi x ekseni boyunca kayma işlemi için kullanılmaktadır.
#Matrisdeki değerler k_x değişkenine, değerine göre, x ekseni boyunca kayma işlemini gerçekleştirmektedir.
#y_kayma_matrisi, y ekseni boyunca kayma işlemi için kullanılmaktadır.
#Matristeki değerler k_y değişkenine, değerine göre, y ekseni boyunca kayma işlemini gerçekleştirmektedir.
#dönme_matrisi dönme işlemlerinde kullanılan rotasyon matrisidir.
#scale_matrisi hem x hem de y eksenin ölçeklendirme için kullanılmaktadır.
#sx, x ekseninde sy ise y ekseninde büyültme/küçültme faktör değerleridir.
#aynalama_matrisi hem x hem de y ekseninde aynlaması için kullanılmaktadır.
#Öteleme ise, belirlenen mesafeye göre görüntü, x ve y eksenleri boyunca ötelenmektedir.

trans_matris = donme_matrisy_kayma_matris
trans_matris = x_kayma_matrisscale_matrisaynalama_matris
trans_matris += oteleme
#Görüntü üzerinde gerçekleştirilmek istenen işlemleri tek bir dizi olarak birleştirmek için
#tüm matris değerleri çarpılmaktadır.

w, h = goruntu.size
#Görüntü boyutları w, h değişkenlerine aktarılır

once = []
x, y = [], []
once.append(array([[0, 0, 1]]).transpose())
once.append(array([[w-1, 0, 1]]).transpose())
once.append(array([[0, h-1, 1]]).transpose())
once.append(array([[w-1, h-1, 1]]).transpose())
#Elde edilen trans_matrisi ile görüntünün orijinal boyutları çarpılması için ilk olarak
#trans_matrisine uygun hale getirilmesi için bir dizi oluşturulmaktadır.

for i in range(len(once)):
sonra = trans_matris*once[i]
x.append(sonra[0, 0])
y.append(sonra[1, 0])
yeni_yukseklik = int(round(max(y)-min(y)))+1
yeni_genislik = int(round(max(x)-min(x)))+1
trans_matris = matrix([[1, 0, -min(x)], [0,1,-min(y)], [0,0,1]])*trans_matris
t_inv = linalg.inv(trans_matris)
t_inv_tuple = (t_inv[0,0], t_inv[0,1], t_inv[0,2], t_inv[1,0], t_inv[1,1],t_inv[1,2])
return t_inv_tuple, yeni_genislik, yeni_yukseklik

affine_tuple, ww, hh = affine_transform(görüntü, scale=(1.2, 1.2), kayma=(0, 0), dönme=pi/4, translate=(10, 10), aynalama=(-1,-1))

wp_goruntu = goruntu.transform((ww,hh), Image.AFFINE, affine_tuple)

imshow(wp_goruntu)
#affin dönüşümünde görüntünün boyutu değişmektedir. Yeni boyutları hesaplamak için trans_matrisiyle orijinal
#boyut kullanılarak gerçekleştirilmek için yukarıdaki döngü bloğu ile sağlanmıştır.

senin kodlar güzel oldu sanki?

1 Beğeni

Aynen ya :smiley: çok iyi oldu :smiley:
sadece return fonksiyonu renklenmemiş, zaten tek problem de orada bizahmet o problemi de çözersen :smiley:

reis ben sadece kodun görünüm kısmına yardımcı olabiliyorum şuan.

1 Beğeni

modu tam renkli paylaştım umarım bir jpeg dosyasıyla bunu deneyip çözebilirsin ve bana da haber verirsin.

Kodun düzgün renklenmesi için şu şekilde kullanılması lazım:

```python
print()
```

Anladım Ekrem abi, onu çözdüm.

Hata şu şekilde:
image

Şu kodlardaki hatayı tespit ederseniz, sorunu çözebilirsiniz.

#Elde edilen trans_matrisi ile görüntünün orijinal boyutları çarpılması için ilk olarak
#trans_matrisine uygun hale getirilmesi için bir dizi oluşturulmaktadır.

for i in range(len(once)):
    sonra = trans_matris*once[i]
    x.append(sonra[0, 0])
    y.append(sonra[1, 0])
yeni_yukseklik = int(round(max(y)-min(y)))+1
yeni_genislik = int(round(max(x)-min(x)))+1
trans_matris = matrix([[1, 0, -min(x)], [0,1,-min(y)], [0,0,1]])*trans_matris
t_inv = linalg.inv(trans_matris)
    t_inv_tuple = (t_inv[0,0], t_inv[0,1], t_inv[0,2], t_inv[1,0], t_inv[1,1],t_inv[1,2])
    return t_inv_tuple, yeni_genislik, yeni_yukseklik

for icinde return mu var?

Evet. Aslında for'un içinde bile değil.

Yeminle kitapta böyle yazıyordu.
Bu kodları üç şekilde de denedim, yani hem hepsini for içinde blok çizgisinde kullanarak, hem de yeni_yükseklik değişkenine kadar ki kısımdan sonra da bloktan çıkararak.

Hatta o zaman da şöyle bir hata verdi:
image

Aşağıdaki kodları çalıştırın isterseniz:

  1. Girinti hataları düzeltildi.
  2. NameError hatası veren yerler düzeltildi.
  3. show fonksiyonu çağrıldı. Çünkü imshow fonksiyonundan sonra show fonksiyonunun çağrılması gerekiyor ki resim gösterilsin.
import os
from PIL import Image
from pylab import *

goruntu = Image.open("res1.jpg")

def affine_transform(goruntu, scale=(1,1),kayma=(0,0),donme=0, translate=(0,0), aynalama=(1,1)):
    k_x, k_y = kayma
    tx, ty = translate
    ax, ay = aynalama
    theta = donme
    sx, sy = scale
    #affine_transform foksiyonu ile görüntü değişkeni ile bir görüntü gönderilerek
    #scale değişkeni ile x ve y yönünde ölçeklendirme faktör değerlerini ifade
    #etmektedir.
    #Kayma değişkeni ise x ve y eksenindeki kayma değerlerini ifade etmektedir.
    #Dönme değişkeni ise açısal olarak saat yönünün tersindeki dönme açısını
    #ifade etmektedir.

    x_kayma_matris = matrix([[1, k_x, 0], [0,1,0], [0,0,1]])
    y_kayma_matris = matrix([[1, 0, 0], [k_y,1,0], [0,0,1]])
    donme_matris= matrix([[cos(theta), -sin(theta), 0], [sin(theta),cos(theta),0], [0,0,1]])
    scale_matris = matrix([[sx, 0, 0], [0,sy,0], [0,0,1]])
    aynalama_matris = matrix([[ax, 0, 0], [0,ay,0], [0,0,1]])
    oteleme = matrix([[1, 0, tx], [0,1,ty], [0,0,1]])
    #x_kayma_matrisi x ekseni boyunca kayma işlemi için kullanılmaktadır.
    #Matrisdeki değerler k_x değişkenine, değerine göre, x ekseni boyunca kayma işlemini gerçekleştirmektedir.
    #y_kayma_matrisi, y ekseni boyunca kayma işlemi için kullanılmaktadır.
    #Matristeki değerler k_y değişkenine, değerine göre, y ekseni boyunca kayma işlemini gerçekleştirmektedir.
    #dönme_matrisi dönme işlemlerinde kullanılan rotasyon matrisidir.
    #scale_matrisi hem x hem de y eksenin ölçeklendirme için kullanılmaktadır.
    #sx, x ekseninde sy ise y ekseninde büyültme/küçültme faktör değerleridir.
    #aynalama_matrisi hem x hem de y ekseninde aynlaması için kullanılmaktadır.
    #Öteleme ise, belirlenen mesafeye göre görüntü, x ve y eksenleri boyunca ötelenmektedir.

    trans_matris = donme_matris*y_kayma_matris
    trans_matris *= x_kayma_matris*scale_matris*aynalama_matris
    trans_matris += oteleme
    #Görüntü üzerinde gerçekleştirilmek istenen işlemleri tek bir dizi olarak birleştirmek için
    #tüm matris değerleri çarpılmaktadır.

    w, h = goruntu.size
    #Görüntü boyutları w, h değişkenlerine aktarılır

    once = []
    x, y = [], []
    once.append(array([[0, 0, 1]]).transpose())
    once.append(array([[w-1, 0, 1]]).transpose())
    once.append(array([[0, h-1, 1]]).transpose())
    once.append(array([[w-1, h-1, 1]]).transpose())
    #Elde edilen trans_matrisi ile görüntünün orijinal boyutları çarpılması için ilk olarak
    #trans_matrisine uygun hale getirilmesi için bir dizi oluşturulmaktadır.

    for i in range(len(once)):
        sonra = trans_matris*once[i]
        x.append(sonra[0, 0])
        y.append(sonra[1, 0])
    yeni_yukseklik = int(round(max(y)-min(y)))+1
    yeni_genislik = int(round(max(x)-min(x)))+1
    trans_matris = matrix([[1, 0, -min(x)], [0,1,-min(y)], [0,0,1]])*trans_matris
    t_inv = linalg.inv(trans_matris)
    t_inv_tuple = (t_inv[0,0], t_inv[0,1], t_inv[0,2], t_inv[1,0], t_inv[1,1],t_inv[1,2])
    return t_inv_tuple, yeni_genislik, yeni_yukseklik

affine_tuple, ww, hh = affine_transform(goruntu, scale=(1.2, 1.2), kayma=(0, 0), donme=pi/4, translate=(10, 10), aynalama=(-1,-1))

wp_goruntu = goruntu.transform((ww,hh), Image.AFFINE, affine_tuple)

imshow(wp_goruntu)
show()

Orijinal görüntü:

Kodlar, çalıştırıldıktan sonra oluşan görüntü:
Figure_1

3 Beğeni

Sen nasıl bir gıralsın, teşikkürler.

Yahu koda o kadar yorum yazdım ki, blokta def’i unuttum :smiley: Kusura bakma ya :smiley:

Sorun değil. :slight_smile: