Computer Vision Nedir?
Dijital görüntüleri ve videoları analiz etmek ve yorumlamak için kullanılır. İnsan gözünün algılama ve yorumlama yeteneğini taklit eder. Temel amacı videolardan veya görüntülerden anlam çıkartmaya çalışmaktır.
Genellikle dijital görüntü işleme, makine öğrenimi ve yapay zeka tekniklerini anlam çıkartmak için kullanır.
Bu teknolojinin uygulama alanları oldukça geniştir. Tıp, otomotiv, savunma sanayi gibi sektörlerde kullanılabilmektedir. Örneğin, tıbbi görüntülemede kanserli hücreleri tespit etmek veya savunma sanayide insanların yürüyüşünden tanınması tarzında örnekler verilebilir.
Altta göründüğü gibi özellikler yapılabilmektedir.
OpenCv kütüphanesi kullanarak aşağıdaki işlemler yapılabilir:
- Gerekli Kütüphaneleri Çağırma
- Resim Yüklama ve Gösterme
- Resimlerin Yüklenip Yüklenmediğini Kontrol Etme
- Yüzleri Kare Etrafına Alma
- Fotoğrafı Gri Yapma
- Fotoğrafı Siyah ve Bayaz Yapma
- Fotoğrafı Bulanıklaştırma
- Fotoğrafı Döndürme
- Fotoğrafın Kenarlarını Bellirleme
- Yolun Şeritlerini Belirleme
- Bozuk Paraları Yuvarlak İçine Alma
- Resimdeki Kelimeleri İşaretleme
- Histogram Grafiği Kullanarak Piksel Yoğunluğunu Hesaplama
0- Kütüphanenin Kurulumu
pip install numpy #Bu kod görüntü işlemede kullanılan büyük bir kütüphanedir. Öncelikle bu kütüphaneyi yüklememiz gerekmektedir.
pip install opencv-python #Daha sonra bu kodu kullanarak OpenCV kurulumunu tamamlamış olacaksınız.
1- Gerekli Kütüphaneleri Çağırma
import cv2
from matplotlib import pyplot as plt
import numpy as np
# Burada tüm kütüphaner yüklenir. Görsel işleme ve görselleştirme işlemleri için gerekli olanlar yüklenir.
2- Resim Yükleme ve Gösterme
resim = cv2.imread("Hocalar.jpeg") # Resimi okur. Resimi yükler.
cv2.imshow("Resim",resim) # Resimi gösterir.
cv2.waitKey(0) # Bir tuşa basılasıya kadar bekler.
cv2.destroyAllWindows() # Görseli kapatır.
3- Resimlerin Yüklenip Yüklenmediğini Kontrol Etme
# Görüntüyü yükler.
resim = cv2.imread("Hocalar.jpeg")
# Görüntüyü kontrol eder.
if resim is None: # Eğer görüntü yok ise bu kodu çalıştırır.
print("Görüntü yüklenemedi")
else: # Eğer görüntü var ise bu kodu çalıştırır.
print("Görüntü başarıyla yüklendi")
4- Yüzleri Kare Etrafına Alma
yüz_tanım = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml') # Yüz algılama sınıfını oluşturur.
# Görüntüyü yükler.
img_path = "Hocalar.jpeg"
resim = cv2.imread(img_path)
# Yüzleri algılar.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
yüzler = yüz_tanım.detectMultiScale(gri_resim, scaleFactor=1.1, minNeighbors=5)
# Yüzleri çerçeve içine alır.
for (x, y, w, h) in yüzler:cv2.rectangle(resim, (x, y), (x+w, y+h), (255, 0, 0), 2) #Yüzlerin etrafını algılar ve kare çizer.
# Görüntüyü gösterir.
cv2.imshow("Yuzleri Goster", resim)
cv2.waitKey(0)
cv2.destroyAllWindows()
5- Fotoğrafı Gri Yapma
# Fotoğrafı yükler.
resim = cv2.imread("Hocalar.jpeg")
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Gri tonlu fotoğrafı gösterir.
cv2.imshow("Gri Tonlu Fotoğraf", gri_resim)
cv2.waitKey(0)
cv2.destroyAllWindows()
6- Fotoğrafı Siyah ve Bayaz Yapma
# Fotoğrafı yükler.
resim = cv2.imread("Hocalar.jpeg")
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Eşik değeri belirler.
_, siyahvebeyaz = cv2.threshold(gri_resim, 127, 255, cv2.THRESH_BINARY) # Eşik değeri olarak seçilen 127'yi geçerse siyah geçmezse beyaz olacak şekilde ayarlandı.
# Siyah beyaz fotoğrafı gösterir.
cv2.imshow("Siyah Beyaz Fotoğraf", siyahvebeyaz)
cv2.waitKey(0)
cv2.destroyAllWindows()
7- Fotoğrafı Bulanıklaştırma
# Fotoğrafı yükler.
resim = cv2.imread("Hocalar.jpeg")
# Bulanıklaştırma işlemini yapar.
bulanık = cv2.GaussianBlur(resim, (15, 15), 0) # Bulanıklaştırma yapar ve bulanıklaştırma şiddetini ayarlar.
# Bulanıklaştırılmış fotoğrafı gösterir.
cv2.imshow("Bulanıklaştırılmış Fotoğraf", bulanık)
cv2.waitKey(0)
cv2.destroyAllWindows()
8- Fotoğrafı Döndürme
# Görüntüyü yükler.
resim_yükleme = "Hocalar.jpeg"
resim = cv2.imread(resim_yükleme)
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Görüntünün boyutlarını alır.
(h, w) = gri_resim.shape[:2] # Boyutları ayarlar.
# Dönme merkezini belirler.
center = (w // 2, h // 2) # H ve W değerlerine göre merkezi alır.
# Dönme matrisini oluşturur.
angle = 13
scale = 1.1
M = cv2.getRotationMatrix2D(center, angle, scale) # Döndürme işlemini yapar.
# Dönüştürür.
rotated = cv2.warpAffine(gri_resim, M, (w, h))
# Görüntüyü gösterir.
plt.imshow(rotated, cmap='gray')
plt.axis('off')
plt.show()
9- Fotoğrafın Kenarlarını Bellirleme
# Görüntüyü yükler.
resim_yükleme = "Hocalar.jpeg"
resim = cv2.imread(resim_yükleme)
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Eşik değeri belirler.
(thresh, binary_image) = cv2.threshold(gri_resim, 200, 255, cv2.THRESH_BINARY)
# Gaussian bulanıklık uygulaması.
blurred_image = cv2.GaussianBlur(binary_image, (5, 5), 3)
# Kenar tespiti (Canny) yapar.
canny_image = cv2.Canny(blurred_image, 180, 255)
# Görüntüyü gösterme
plt.imshow(canny_image, cmap='gray')
plt.axis('off')
plt.show()
10- Yolun Şeritlerini Belirleme
# Görüntüyü yükler.
resim_yükleme = "Yol.jpeg"
resim = cv2.imread(resim_yükleme)
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Eşik değeri belirleme ve kenar tespiti (Canny)
_, output2 = cv2.threshold(gri_resim, 200, 255, cv2.THRESH_BINARY) # Kenar tespiti için eşik değerleri ayarlanır.
output2 = cv2.Canny(output2, 180, 255)
# Hough dönüşümü ile çizgileri algılar.
lines = cv2.HoughLinesP(output2, 1, np.pi/180, 30) # Çizgileri algılayan kod yazılır.
# Algılanan çizgileri orijinal görüntüye çizer.
if lines is not None:
for line in lines:
x1, y1, x2, y2 = line[0]
cv2.line(resim, (x1, y1), (x2, y2), (0, 255, 0), 4) # Görüntü ile çizgileri birleştirir.
# Görüntüyü gösterir.
plt.figure(figsize=(10, 8))
plt.imshow(cv2.cvtColor(resim, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
11- Bozuk Paraları Yuvarlak İçine Alma
# Görüntüyü yükler.
resim = cv2.imread("Paralar6.jpeg")
# Gri tona dönüştürür.
gri_resim = cv2.cvtColor(resim, cv2.COLOR_BGR2GRAY)
# Eşik değeri belirleme ve kenar tespiti (Canny) yapar.
(thresh, output2) = cv2.threshold(gri_resim, 120, 255, cv2.THRESH_BINARY)
output2 = cv2.GaussianBlur(output2, (5, 5), 1)
output2 = cv2.Canny(output2, 180, 255)
# Hough dönüşümü ile daireleri algıla
circles = cv2.HoughCircles(output2, cv2.HOUGH_GRADIENT, 1, 10, param1=180, param2=27, minRadius=20, maxRadius=60)
# Algılanan daireleri çiz
if circles is not None:
circles = np.uint16(np.around(circles))
for i in circles[0,:]:
# Dairenin dış çemberini çiz
cv2.circle(resim, (i[0], i[1]), i[2], (0, 255, 0), 2)
# Dairenin merkezini çiz
cv2.circle(resim, (i[0], i[1]), 2, (0, 0, 255), 3)
# Sonucu göster
plt.imshow(cv2.cvtColor(resim, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
12- Resimdeki Kelimeleri İşaretleme
# Görüntüyü yükler.
resim = cv2.imread("Yazı.png")
# Yazıları algıla ve verileri elde eder.
veri = pytesseract.image_to_data(resim, output_type=pytesseract.Output.DICT, config="--psm 6")
# Algılanan kutu sayısını alır.
n_boxes = len(veri['text'])
# Her kutuyu çerçeveler.
for i in range(n_boxes):
# Koordinatları ve boyutları alır.
x, y, w, h = veri['left'][i], veri['top'][i], veri['width'][i], veri['height'][i]
# Sadece yazı kutularını işler.
if data['text'][i].strip() != '':
# Dikdörtgenle çerçeveler.
cv2.rectangle(resim, (x, y), (x + w, y + h), (0, 255, 0), 2)
# Görüntüyü gösterir.
plt.imshow(cv2.cvtColor(resim, cv2.COLOR_BGR2RGB))
plt.axis('off')
plt.show()
13- Histogram Grafiği Kullanarak Piksel Yoğunluğunu Hesaplama
# Görüntüyü yükler.
resim_yükleme = "Doga.jpg"
resim = cv2.imread(resim_yükleme, cv2.IMREAD_GRAYSCALE)
# Histogramı hesapla
histogram = cv2.calcHist([resim], [0], None, [256], [0, 256])
# Histogram grafiğini çiz
plt.plot(histogram, color='black')
plt.xlabel('Piksel Değeri')
plt.ylabel('Piksel Sayısı')
plt.title('Görüntü Histogramı')
plt.show()
0 Yorumlar