Raspberry Pi ile görüntü işleme uygulamak için en kolay başlangıç, Python ve OpenCV kullanarak bir görüntüyü okumak, dönüştürmek ve sonucu yeni bir dosyaya kaydetmektir. Aşağıdaki örnek; renkli bir resmi gri tonlamaya çevirir, eşikleme uygular ve işlenmiş görüntüyü kaydeder. Böylece aynı temel akışı daha sonra kamera görüntüsü, kenar bulma veya nesne algılama için genişletebilirsiniz.
Raspberry Pi üzerinde Raspberry Pi OS, çalışan Python 3 kurulumu, işlenecek bir görüntü dosyası ve OpenCV gerekir. Örnekte görüntü dosyasının adı
İşleme başlamadan önce bir terminal açın ve çalışma klasörü oluşturun.
Görüntü işleme adımını seçerken hedefiniz önemlidir. Aşağıdaki işlemler, aynı görüntü okuma ve çıktı kaydetme akışının içine eklenebilir.
Örneğin yalnızca kenarları görmek istiyorsanız ana koddaki
Buradaki iki sayı görüntünün aydınlığına ve ayrıntı düzeyine göre değişebilir. Çok düşük değerler gürültüyü de kenar olarak işaretleyebilir; çok yüksek değerler gerçek kenarları kaçırabilir.
Çıktının tamamen siyah veya tamamen beyaz olması, çoğunlukla eşik değerinin görüntüye uygun olmadığını gösterir; bu durum OpenCV'nin çalışmadığını kanıtlamaz. Daha aydınlık ya da daha karanlık görüntülerde
Görüntü okunamadığında ilk olarak dosya yolunu, büyük-küçük harf farkını ve dosya uzantısını kontrol edin.
Bu örnek sabit bir görüntüyü işler. Canlı kamera uygulamasına geçerken aynı gri tonlama, eşikleme veya kenar bulma adımlarını her kamera karesine uygulamanız gerekir. Önce tek bir görüntüde doğru sonuç aldığınızdan emin olun; ardından kamera yakalama katmanını ekleyin. Böylece görüntünün alınması, işlenmesi ve gösterilmesiyle ilgili hataları birbirine karıştırmazsınız.
Gerekli ortam
Raspberry Pi üzerinde Raspberry Pi OS, çalışan Python 3 kurulumu, işlenecek bir görüntü dosyası ve OpenCV gerekir. Örnekte görüntü dosyasının adı
test.jpg olarak kabul edilmiştir. Kamera kullanmadan önce dosya üzerinden işlem yapmak, sorunun kameradan mı yoksa görüntü işleme kodundan mı kaynaklandığını ayırmayı kolaylaştırır.OpenCV ile ilk görüntü işleme uygulaması
İşleme başlamadan önce bir terminal açın ve çalışma klasörü oluşturun.
- Çalışma klasörünü oluşturun. Terminalde aşağıdaki komutları çalıştırın. Görüntü dosyanızı daha sonra bu klasöre koyun.
Bash:mkdir -p ~/goruntu-denemesi cd ~/goruntu-denemesi - OpenCV paketini kurun. Raspberry Pi OS paket yöneticisini kullanarak Python için OpenCV desteğini yükleyin. Kurulum tamamlandığında terminal hata vermeden yeniden komut satırına dönmelidir.
Bash:sudo apt update sudo apt install -y python3-opencv - İşlenecek görüntüyü klasöre yerleştirin. Örneğin
test.jpgdosyasını~/goruntu-denemesiiçine kopyalayın. Dosya adını farklı kullandıysanız aşağıdaki kodu çalıştırırken o adı belirtin.
- Python dosyasını oluşturun. Klasörde
goruntu_isleme.pyadlı bir dosya oluşturun ve aşağıdaki kodu içine kaydedin.
Python:import sys from pathlib import Path import cv2 if len(sys.argv) != 2: print("Kullanım: python3 goruntu_isleme.py goruntu_dosyasi") sys.exit(1) kaynak_yolu = Path(sys.argv[1]) goruntu = cv2.imread(str(kaynak_yolu)) if goruntu is None: print(f"Görüntü okunamadı: {kaynak_yolu}") print("Dosya yolunu, dosya adını ve uzantıyı kontrol edin.") sys.exit(1) gri = cv2.cvtColor(goruntu, cv2.COLOR_BGR2GRAY) _, ikili = cv2.threshold( gri, 127, 255, cv2.THRESH_BINARY ) cikti_yolu = kaynak_yolu.with_name( kaynak_yolu.stem + "_islenmis.png" ) if not cv2.imwrite(str(cikti_yolu), ikili): print(f"Çıktı kaydedilemedi: {cikti_yolu}") sys.exit(1) print(f"İşlem tamamlandı: {cikti_yolu}") - Programı çalıştırın. Aynı klasördeyken kaynak görüntünün yolunu komuta verin. Başarılı çalışmada, işlenmiş dosyanın yolunu bildiren bir mesaj görürsünüz.
Bash:python3 goruntu_isleme.py test.jpg - Çıktıyı kontrol edin. Klasörde
test_islenmis.pngdosyasını açın. Açık renkli bölgeler beyaza, koyu bölgeler siyaha dönüştüyse gri tonlama ve eşikleme adımları çalışmıştır.
cv2.cvtColor() ile gri tonlamaya çevirir. cv2.threshold() işlevindeki 127 değeri eşik olarak kullanılır: gri değeri bu sınırın üzerindeyse piksel beyaza, bu sınıra eşit veya daha düşükse siyaha dönüştürülür. Bu işlem nesnenin ne olduğunu anlamaz; yalnızca pikselleri belirli bir kurala göre ayırır.Aynı akışta farklı işlemler
Görüntü işleme adımını seçerken hedefiniz önemlidir. Aşağıdaki işlemler, aynı görüntü okuma ve çıktı kaydetme akışının içine eklenebilir.
| İşlem | Ne üretir? | Ne zaman kullanılır? |
|---|---|---|
| Gri tonlama | Tek kanallı açık-koyu görüntü | Renk bilgisi gerekmiyorsa ve işlemi basitleştirmek için |
| Eşikleme | Siyah-beyaz maske | Arka plan ile nesneyi ayırmak için |
| Kenar bulma | Belirgin sınır çizgileri | Şekil veya nesne sınırlarını incelemek için |
| Kontur bulma | Kapalı şekillerin sınırları | Alan, çevre veya şekil ölçmek için |
_, ikili = cv2.threshold(...) atama bloğunu aşağıdaki tek satırla değiştirin. Sonraki dosya adı oluşturma ve kaydetme kodunu koruyun; test_islenmis.png bu kez kenar görüntüsünü içerir. Böylece kaydetme adımının kullandığı ikili değişkeni tanımlı kalır.
Python:
ikili = cv2.Canny(gri, 100, 200)
Buradaki iki sayı görüntünün aydınlığına ve ayrıntı düzeyine göre değişebilir. Çok düşük değerler gürültüyü de kenar olarak işaretleyebilir; çok yüksek değerler gerçek kenarları kaçırabilir.
Sonucu nasıl yorumlamalısınız?
Çıktının tamamen siyah veya tamamen beyaz olması, çoğunlukla eşik değerinin görüntüye uygun olmadığını gösterir; bu durum OpenCV'nin çalışmadığını kanıtlamaz. Daha aydınlık ya da daha karanlık görüntülerde
127 yerine farklı bir eşik deneyebilir veya sabit eşik yerine uyarlamalı eşikleme kullanabilirsiniz.Görüntü okunamadığında ilk olarak dosya yolunu, büyük-küçük harf farkını ve dosya uzantısını kontrol edin.
cv2.imread() sonucunun None olması, programın geçerli bir görüntü verisi alamadığını gösterir. İşlenmiş dosya oluşuyor fakat içerik beklenenden farklıysa giriş görüntüsünün ışığını, çözünürlüğünü ve seçilen yöntemin amacınıza uygun olup olmadığını inceleyin.Bu örnek sabit bir görüntüyü işler. Canlı kamera uygulamasına geçerken aynı gri tonlama, eşikleme veya kenar bulma adımlarını her kamera karesine uygulamanız gerekir. Önce tek bir görüntüde doğru sonuç aldığınızdan emin olun; ardından kamera yakalama katmanını ekleyin. Böylece görüntünün alınması, işlenmesi ve gösterilmesiyle ilgili hataları birbirine karıştırmazsınız.
Sık sorulan sorular
Son düzenleme: