OpenCV
OpenCV, görüntü işleme ve bilgisayarlı görü için 2.500'den fazla algoritma içeren açık kaynaklı bir kütüphanedir. Ne işe yaradığı, derin öğrenmeyle nasıl birlikte kullanıldığı ve kod örneği.
OpenCV (Açık Kaynak Bilgisayarlı Görü Kütüphanesi), görüntü işleme ve bilgisayarlı görü (CV) için 2.500'den fazla optimize edilmiş algoritma içeren bir açık kaynak kütüphanedir. Görüntü ve video okur, yazıp kaydeder; kamera akışlarını yakalar; pikselleri filtreleyip dönüştürür; özellikleri algılayıp eşleştirir, kameraları kalibre eder ve eğitilmiş sinir ağlarını çalıştırır. OpenCV, 1999'da Intel Research bünyesinde başladı; C++ ile yazılmıştır ve Python ile Java bağlamaları bulunur. 4.5.0 sürümünden beri Apache 2.0 lisansı altında dağıtılır. Python'da pip install opencv-python ile yüklenir, cv2 olarak içe aktarılır ve her görüntüyü NumPy dizisi olarak temsil eder.
OpenCV Ne Yapar?#
- Görüntü ve video G/Ç: Yaygın görüntü biçimlerini okur ve kaydeder, video dosyalarının kodunu çözer, kameralardan ve ağ akışlarından kareler yakalar.
- Görüntü işleme: Yeniden boyutlandırma, renk uzayı dönüşümü, bulanıklaştırma, keskinleştirme, eşikleme ve morfolojik işlemler; görüntünün modele ulaşmasından önce uygulanan standart ön işleme adımlarıdır.
- Özellik algılama ve eşleştirme: SIFT ve ORB gibi köşe ve ilgi noktası algılayıcıları, panorama birleştirme, nesne konumlandırma ve görsel SLAM için görüntüler arasında eşleştirilebilen ayırt edici noktaları bulur. Patenti sona erdikten sonra SIFT, 4.4.0 sürümünde ana kütüphaneye eklendi.
- Kamera geometrisi: Kalibrasyon mercek bozulmasını giderir, homografiler perspektifi düzeltir ve stereo eşleştirme, robotik ve 3B yeniden yapılandırma için iki kameradan derinliği çıkarır.
- Video analizi: Arka plan çıkarma, hareketli nesneleri sabit bir sahneden ayırır; optik akış ise piksellerin kareler arasında nasıl hareket ettiğini ölçer.
- Derin sinir ağı çıkarımı:
dnnmodülü, örneğin ONNX biçimindeki eğitilmiş modelleri yükler ve yüklü bir derin öğrenme çatısı olmadan CPU veya GPU üzerinde çalıştırır.
Bu klasik işlem hattı, öğrenilmiş bir model kullanmadan görüntüdeki şekillerin dış hatlarını bulur:
import urllib.request
import cv2
import numpy as np
# Download a sample image and decode it into a BGR NumPy array
data = urllib.request.urlopen("https://ultralytics.com/images/bus.jpg").read()
image = cv2.imdecode(np.frombuffer(data, np.uint8), cv2.IMREAD_COLOR)
# Classical pipeline: grayscale, blur to suppress noise, then Canny edge detection
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edges = cv2.Canny(blurred, 50, 150)
# Trace connected edge pixels into contours, the outlines of shapes in the scene
contours, _ = cv2.findContours(edges, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
print(f"Image shape: {image.shape}, contours found: {len(contours)}")Image shape: (1080, 810, 3), contours found: 1449 yazdırılır: üç renk kanallı 1080×810 boyutunda bir görüntü ve kenarlarından izlenen 1.449 ayrı dış hat. OpenCV renk kanallarını mavi-yeşil-kırmızı (BGR) sırasıyla saklar; bu nedenle RGB bekleyen kütüphanelere aktarılan görüntüler önce cv2.cvtColor dönüşümünden geçirilmelidir.
OpenCV ve Derin Öğrenme Çatılar#
OpenCV ile PyTorch ve TensorFlow gibi derin öğrenme çatıları, aynı işlem hattının farklı aşamalarında çalışır. OpenCV, ağın çevresindeki veri ön işlemeyi ve çıktıyı yönetir; kareleri alır, yeniden boyutlandırır, sonuçları çizer ve çıktı videosunu yazar. Aradaki evrişimli sinir ağını ise çatı eğitir ve çalıştırır. Gerçek zamanlı bir video uygulaması, her karede bu adımları tekrarlar:
Ultralytics YOLO26, OpenCV'nin BGR NumPy karelerini doğrudan kabul eder; results[0].plot() aynı biçimde işaretlenmiş bir kare döndürür. Böylece modeli herhangi bir dönüştürme yapmadan OpenCV döngüsüne ekleyebilirsin. Bu örnek, ultralytics paketinde bulunan örnek görüntü üzerinde döngünün tek bir geçişini çalıştırır:
import cv2
from ultralytics import YOLO
from ultralytics.utils import ASSETS
# OpenCV, pakete eklenmiş örnek görüntüyü BGR NumPy dizisi olarak yükler
frame = cv2.imread(str(ASSETS / "bus.jpg"))
# YOLO26, OpenCV karesini doğrudan kullanır
model = YOLO("yolo26n.pt")
results = model(frame)
# plot(), OpenCV'nin görüntüleyebileceği veya kaydedebileceği, üzerine açıklama eklenmiş bir BGR dizisi döndürür
annotated = results[0].plot()
cv2.imwrite("bus_annotated.jpg", annotated)Bir video döngüsünde, aynı üç çağrı cv2.VideoCapture kaynağından gelen her karede çalışır; cv2.imshow veya cv2.VideoWriter, cv2.imwrite öğesinin yerini alır.










