Görüntü İşleme – 2

Şubat 28, 2020 0 Yazar: alikperislam

Aritmetik İşlemler :

import cv2
import numpy as np
### Aritmetik İşlemlerin Algoritması:
#fotografları al daha sonra logo olan fotoyu yukseklik,genslik,kanal=logo.shape yap ve atamaları yap.
#logoyu ekleyeceğimiz için logoyu gri resim yap ilk önce
#logo gri olduysa artık ROI ile büyük resmin alanını ayarla bunuda logo.shape ile yaptıhın yük. ve gen. değerleri==olsun.
#ret,mask değerlerini gir logo için ve masklama işlemini yap artık alacağımız logo alanı bembeyaz olsun.
#mask_inver ile masklanmış resmin tam tersini al siyah-beyaz, beyaz-siyah olacak.
#ters maskladığımız logoyu drogra fotosuna ekleyeceğiz çünkü 1 ve 0 =0 o yuzden siyah hep baskın olacak ve eklenecek.
#drogbanın fotosuna eklediğimiz logoyu ilke rengine orijinal rengine tekrardan çevireceğiz.
#son olarak ROI de her şey normal istediğimiz gibi ama artık ROI yi normal Drogba resmine orijinal ekrana eklemeliyiz.
def main():
    #ayrıca metodları kullanmak zorunda değiliz dümdüz de yapılabilir fakat renk katması açısından metodları kullandık.
    drogba=cv2.imread("drogba.jpg")
    gs=cv2.imread("gs.jpg")
    yukseklik,genislik,kanal_sayısı=gs.shape
    print("yükseklik :",yukseklik,"\ngenişlik :",genislik,"\nkanal :",kanal_sayısı)



    gs_gri=cv2.cvtColor(gs,cv2.COLOR_BGR2GRAY)# yeni_isim=cv2.cvtCOLOR(alacagımız yer,gri yapan kod) fotografı gri yaptık.
    # not : resmi veya fotografı gri yapmak için gs=cv2.imread('gs.jpg',0) de yapabilirdik kısayolu budur.


    #ROI -----> resmin belli bir bölgesini almak anlamına gelektedir.
    ROI=drogba[0:yukseklik,0:genislik] # drogra resminin boyutlarını ROI ye belirttik. amaç : gs_gri nin boyutu ile aynı
    #bir alan oluşturmaktı şimdi iki farklı boyuttaki resmi birleştirme işine girebiliriz bu sayede.


    # bir resmin belli bir B_G_R değerinden sonrakileri thresh edeceğiz yani başka bir değere eşitleyeceğiz.
    ret,mask=cv2.threshold(gs_gri,30,255,cv2.THRESH_BINARY) #ret=min hangi değerleri, mas=hangi değere eşit olsunlar.
    #cv2.threshold(alacagımız_resim,min değer,hangi değere eşit olsunlar =renk yani,cv2.THRESH_BINARY)


    #resmin masklandıktan sonra tersini almak istersek eğer mask_inver yapıyoruz.
    mask_inver=cv2.bitwise_not(mask)


    #drogba ROI ile ters masklanmış resmi birleştirme
    drogba_arka=cv2.bitwise_and(ROI,ROI,mask=mask_inver)

    #drogba_arka resmi ile yani ROI de ki siyah gs logosu ile orijinal logoyu değiştiriyoruz.
    toplam=cv2.add(drogba_arka,gs)


    #derlenmiş olan ROI'yi orijinal boyutuna ekleyeceğiz ve bitecek.
    drogba[0:yukseklik,0:genislik]=toplam


    cv2.imshow("GRi GS",gs_gri)
    cv2.imshow("ROI", ROI)
    cv2.imshow("Resmin masklanmış hali",mask)
    cv2.imshow("Resmin ters masklanmış hali", mask_inver)
    cv2.imshow("drogba ve gs logosu",drogba_arka)
    cv2.imshow("renkli logo ile drogba",toplam)
    cv2.imshow("Drogba", drogba)


    cv2.waitKey(0)
    cv2.destroyAllWindows()

print(main())

Görüntü Piramitleri :

import cv2
import numpy as np
def main():
    resim=cv2.imread("logo.jpg")
    print(resim.shape) # (185,150,3) yükseklik,genişlik,kanal sayısı.
    iki_kat_buyuk=cv2.pyrUp(resim)
    print(iki_kat_buyuk.shape) #(370,300,3) iki kat büyüdü resmin pixelleri.
    iki_kat_kucuk=cv2.pyrDown(resim)
    print(iki_kat_kucuk.shape) # (93,75,3) iki kat küçüldü resmin pixelleri.
    # not : tek sayı 2 ile bölününce python'a göre üst klasmana yuvarlanıyor.



    cv2.imshow("Normal resim",resim)
    cv2.imshow("2 kat büyük resim :",iki_kat_buyuk)
    cv2.imshow("2 kat küçük resim :",iki_kat_kucuk)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
main()

np.zeros() :

import cv2
import numpy as np

##np.zeros() adından da anlaşılacağı gibi 0 ları kullanacağız 0---->siyah olduğu için bütün pixellerin matrisleri
##0 olacak ve bu sayede siyah bir arka plan almış olacağız.
def main():
    resim=np.zeros((400,400,3),dtype="uint8")
    print(resim)

    cv2.imshow("siyah arka planlı resim",resim)

    cv2.waitKey(0)
    cv2.destroyAllWindows()
main()

Çizgi_Daire_Yazı eklemek :

import cv2
import numpy as np
#line,circle,text=çizgi,daire,yazı...
def main():
    resim=np.zeros((400,400,3),dtype="uint8") #arka plan tamamen siyah olacak bu sayede.
    resim.fill(255) # böyle yaparsak bütün değerler 0 dan 255 e döner ve arka plan tamamen beyaz olur.

###### resim üzerinde çizgi çizmek :
    cv2.line(resim,(0,0),(400,400),(0,0,255),3) # sol yukardan sağ aşşağıya kadar kırmızı oldu tüm pixeller(çizgi.)
    cv2.line(resim,(400,0),(0,400),(0,0,255),3) # sağ yukardan sol aşşağıya kadar kırmızı oldu tüm pixeller(çizgi.)
    # cv2.line(değişken,(başlangıç değeri),(bitiş değeri),(renk skalası),kalınlık)

###### resim üzerine dörtgen eklemek :
    cv2.rectangle(resim, (100,300), (300,100),(50, 120, 30), 3) #dikdörtgen eklemek için kullanıyorduk bu fonksiyonu.

####### resim üzerinde çember çizmek :
    #cv2.circle(değişken,dairenin merkezinin koordinatları,yarı_çap,renk skalası,kalınlık)
    cv2.circle(resim, (100, 100), 50, (255, 0, 0), 3)
####### resim üzerine yazı eklemek :
    cv2.putText(resim,"Yazilim",(100,100),cv2.FONT_ITALIC,2,(0,50,150),2)
    #cv2.putText(değişken,"yazılacak yazı",yazının alt tarafının geldiği pixeller,font,font boyutu,renk,çizgi boyutu)


    cv2.imshow("arka plan",resim)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
main()