OpenCV Nedir? sorusuna derinlemesine bir mühendislik perspektifiyle cevap aramadan önce, bu kütüphanenin zemin hazırladığı temel disiplin olan bilgisayarla görü (computer vision) kavramını teknik olarak analiz edelim.
Bilgisayarla Görü (Computer Vision) Nedir?
Bilgisayarla görü; dijital görüntülerin (görsel ve videoların) donanımsal düzeyde nasıl temsil edildiğini, saklandığını ve bu iki boyutlu piksel matrislerinden anlamlı, yüksek düzeyli anlamsal bilgilerin matematiksel algoritmalar vasıtasıyla nasıl çıkarıldığını inceleyen bir mühendislik disiplinidir. Bilgisayarla görü, modern Yapay Zeka sistemlerinin en kritik alt alanlarından biridir. Sürücüsüz otonom araçlar (Tesla Autopilot, Waymo), biyometrik yüz tanıma sistemleri, endüstriyel kalite kontrol robotları, tıbbi görüntüleme (tümör tespiti) ve fotoğraf filtreleme uygulamalarının tamamı bilgisayarla görü temelleri üzerine kuruludur.
Matematiksel olarak, tek kanallı (gri tonlamalı / grayscale) bir görüntü iki boyutlu ayrık bir fonksiyon olarak tanımlanır:
![]()
Burada
görüntünün genişliğini,
yüksekliğini ve
ise piksellerin alabileceği maksimum yoğunluk seviyesini (8-bitlik bir görüntü için
, yoğunluk aralığı
) ifade eder. Üç kanallı renkli bir görüntü (RGB veya BGR) ise üç farklı renk matrisinin üst üste binmesiyle oluşan üç boyutlu bir tensördür:
(
).
OpenCV Nedir?
OpenCV (Open Source Computer Vision Library); gerçek zamanlı bilgisayarla görü, makine öğrenimi ve görüntü işleme uygulamaları geliştirmek amacıyla tasarlanmış, açık kaynak kodlu ve çapraz platform destekli dünya standardı bir kütüphanedir. İlk olarak 1999 yılında Intel bünyesinde Gary Bradski tarafından başlatılan proje, günümüzde çok geniş bir topluluk tarafından aktif olarak geliştirilmektedir.
Büyük oranda C++ ile yazılmış olan OpenCV, arka planda Intel Integrated Performance Primitives (IPP) ve OpenCL entegrasyonu sayesinde son derece yüksek çalışma performansına sahiptir. İçerisinde görüntü önişleme, nesne tespiti, kamera kalibrasyonu, hareket analizi, derin öğrenme model çıkarımı (DNN modülü) ve 3D rekonstrüksiyon gibi alanlarda optimize edilmiş
‘den fazla algoritma barındırır. Google, Amazon, Microsoft, Toyota ve Intel gibi teknoloji devleri, bilgisayarlı görü projelerinin omurgasında OpenCV kütüphanesini kullanmaktadır. Kütüphane; C++, Python, Java ve MATLAB dillerine yerel arayüzler sunarken; Windows, Linux, macOS, iOS ve Android işletim sistemlerinde sorunsuz çalışmaktadır.

OpenCV Nasıl Kurulur?
OpenCV kütüphanesini sisteminize dahil etmek oldukça basittir. Hangi işletim sistemini kullandığınıza bağlı olarak aşağıdaki yöntemleri uygulayabilirsiniz:
1. Debian / Ubuntu Linux Üzerinde Kurulum
Linux dağıtımlarında paket yöneticisi (apt) aracılığıyla Python 3 bağlayıcıları ile birlikte kurmak için şu komutu çalıştırabilirsiniz:
sudo apt update
sudo apt install python3-opencv -y2. macOS Üzerinde Derleyerek Kurulum
macOS platformunda OpenCV’nin tüm ek modüllerini (non-free patentli algoritmalar dahil) aktifleştirip C++ projenizde doğrudan kullanmak istiyorsanız, CMake aracıyla kaynak koddan derlemeniz tavsiye edilir. İlk olarak Homebrew ile CMake aracını kurun:
brew install cmakeArdından OpenCV ana deposunu ve genişletilmiş algoritmaları barındıran opencv_contrib deposunu GitHub üzerinden çekerek derleme aşamasına geçin:
git clone https://github.com/opencv/opencv.git
git clone https://github.com/opencv/opencv_contrib.git
cd opencv
mkdir build && cd build
cmake -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..
make -j
(\theta)
M
M ![Rendered by QuickLaTeX.com şu şekilde tanımlanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-424dc1707a56aa782f9a64d7f6c45bb2_l3.png" height="42" width="272" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[M = \begin{bmatrix} \alpha & \beta & (1-\alpha) \cdot x_c - \beta \cdot y_c \\ -\beta & \alpha & \beta \cdot x_c + (1-\alpha) \cdot y_c \end{bmatrix}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Burada](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MTEiIGhlaWdodD0iMTQ5IiB2aWV3Qm94PSIwIDAgODExIDE0OSI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
\alpha = s \cdot \cos\theta
\beta = s \cdot \sin\theta
s
(x_c, y_c)
(x, y)
x', y' ![Rendered by QuickLaTeX.com ) haritalanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-e6d460931df8c376e85eac92208846bb_l3.png" height="64" width="103" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[\begin{bmatrix} x' \\ y' \end{bmatrix} = M \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> OpenCV ile bu işlemi gerçekleştiren kod yapısı şöyledir: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") height, width = img.shape[:2] # Dönüşüm merkezini ve parametreleri tanımla: 70 derece dönüş, 0.5 kat küçültme rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 70, 0.5) # Affine dönüşümü uygula rotated_image = cv2.warpAffine(img, rotation_matrix, (width, height)) cv2.imshow('Rotated Image', rotated_image) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Çözünürlüğü ve İşlem Hızı Optimizasyonu</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Gerçek zamanlı video işleme sistemlerinde performans yönetimi kritik bir faktördür. Piksel tabanlı görüntü analizi karmaşık algoritmalar içerdiğinde işlem süresi hızlı bir şekilde artar. Örneğin, Full HD (](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMDAzIiBoZWlnaHQ9IjM0NyIgdmlld0JveD0iMCAwIDIwMDMgMzQ3Ij48cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiBzdHlsZT0iZmlsbDojY2ZkNGRiO2ZpbGwtb3BhY2l0eTogMC4xOyIvPjwvc3ZnPg==)
1920 \times 1080
30 \text{ FPS} ![Rendered by QuickLaTeX.com hızında işlenmesi durumunda saniyelik veri bant genişliği şu şekilde hesaplanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-3749d7b67fb59bb52eb5b7c3bc56e8f3_l3.png" height="19" width="595" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[\text{Bant Genişliği} = 1920 \times 1080 \times 3 \text{ byte} \times 30 \text{ frame/s} \approx 186.6 \text{ MB/s} \approx 1.49 \text{ Gbps}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Özellikle gömülü sistemlerde (Örn: Raspberry Pi, BeagleBone) bu büyüklükte bir veriyi gerçek zamanlı işlemek ciddi darboğazlara neden olur ve karesel gecikmelere (frame drop) yol açar. Bu nedenle pratik projelerde şu optimizasyon teknikleri uygulanır: <!-- /wp:paragraph --> <!-- wp:list --> <ul class="wp-block-list"><!-- wp:list-item --> <li><strong>Çözünürlük Düşürme (Resizing):</strong> İşlem öncesinde görüntü <code>cv2.resize()</code> ile daha düşük boyutlara (Örn:](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2ODkiIGhlaWdodD0iMzAzIiB2aWV3Qm94PSIwIDAgNjg5IDMwMyI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
320 \times 240
640 \times 480
I
K ![Rendered by QuickLaTeX.com ile taranır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-fadfec4ec85aa01f8a341a20b2d5d259_l3.png" height="56" width="363" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[I_{\text{filtered}}(x, y) = \sum_{i=-k}^{k} \sum_{j=-k}^{k} I(x-i, y-j) \cdot K(i, j)\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Burada](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MzIiIGhlaWdodD0iMTUwIiB2aWV3Qm94PSIwIDAgNzMyIDE1MCI+PHJlY3Qgd2lkdGg9IjEwMCUiIGhlaWdodD0iMTAwJSIgc3R5bGU9ImZpbGw6I2NmZDRkYjtmaWxsLW9wYWNpdHk6IDAuMTsiLz48L3N2Zz4=)
(2k+1) \times (2k+1)
7 \times 7 ![Rendered by QuickLaTeX.com boyutunda bir ortalama alma (box filter) filtresinin kernel yapısı şöyledir: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-433e42ecbb6647062d9643049309ffba_l3.png" height="97" width="212" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[K = \frac{1}{49} \begin{bmatrix} 1 & 1 & \dots & 1 \\ 1 & 1 & \dots & 1 \\ \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & \dots & 1 \end{bmatrix}_{7 \times 7}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>import numpy as np img = cv2.imread("devreyakan.jpg") # 7x7 boyutunda ortalama kernel oluştur kernel = np.ones((7, 7), np.float32) / 49 # 2D konvolüsyon filtresini görüntüye uygula blurred = cv2.filter2D(img, -1, kernel) cv2.imshow('Blurred Image', blurred) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Piramidi (pyrDown / pyrUp)</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Görüntü piramitleri, çözünürlük ölçeklemesinde piksellerin kaybolmasını engellemek için Gaussian filtreleme ile altörneklemeyi (subsampling) bir arada yürütür: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") # Çözünürlüğü yarıya indirir ve Gaussian yumuşatma uygular smaller = cv2.pyrDown(img) # Çözünürlüğü iki katına çıkarır larger = cv2.pyrUp(img) cv2.imshow('Original', img) cv2.imshow('Smaller', smaller) cv2.imshow('Larger', larger) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Kırpma (Slicing)</h3> <!-- /wp:heading --> <!-- wp:paragraph --> NumPy matris dilimleme (slicing) yöntemiyle görüntünün belirli bir Bölge İlgi Alanı (ROI - Region of Interest) kesilip alınabilir: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") height, width = img.shape[:2] # Görüntünün merkez alanından %50'lik bölgeyi kırp start_row, start_col = int(height * 0.15), int(width * 0.15) end_row, end_col = int(height * 0.65), int(width * 0.65) cropped = img[start_row:end_row, start_col:end_col] cv2.imshow('Cropped ROI', cropped) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Kenar Tespiti ve Canny Algoritması</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Kenar bulma işlemlerinde en gelişmiş yöntemlerden biri <strong>Canny Kenar Algoritmasıdır</strong>. Algoritma temel olarak 4 aşamadan oluşur: <!-- /wp:paragraph --> <!-- wp:list --> <ul class="wp-block-list"><!-- wp:list-item --> <li><strong>Gürültü Azaltma:</strong> Görüntüye Gaussian filtresi uygulanarak yüksek frekanslı gürültüler elenir.</li> <!-- /wp:list-item --> <!-- wp:list-item --> <li><strong>Yoğunluk Gradyanlarının Hesaplanması:</strong> Sobel filtreleri kullanılarak yatay (](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1ODMiIGhlaWdodD0iNjMiIHZpZXdCb3g9IjAgMCA1ODMgNjMiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsOiNjZmQ0ZGI7ZmlsbC1vcGFjaXR5OiAwLjE7Ii8+PC9zdmc+)
G_x
G_y
|G|
\theta$) elde edilir:
![Rendered by QuickLaTeX.com \[|G| = \sqrt{G_x^2 + G_y^2}, \quad \theta = \arctan2(G_y, G_x)\]](data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMTMiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMTMgMzIiPjxyZWN0IHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHN0eWxlPSJmaWxsOiNjZmQ0ZGI7ZmlsbC1vcGFjaXR5OiAwLjE7Ii8+PC9zdmc+)
Maksimum Olmayanları Bastırma (Non-maximum Suppression): Pikseller taranarak yerel maksimum olmayan kenar pikselleri inceltilir ve zayıf çizgiler elenir.
Histerezis Eşikleme (Hysteresis Thresholding): İki farklı eşik değeri (alt ve üst) seçilerek güçlü kenarlar doğrudan alınır, alt ve üst eşik arasında kalan pikseller ise güçlü bir kenara bağlı ise kenar kabul edilir; aksi takdirde elenir.
img = cv2.imread("devreyakan.jpg", cv2.IMREAD_GRAYSCALE)
# Canny algoritması: Alt eşik = 20, Üst eşik = 170
canny_edges = cv2.Canny(img, 20, 170)
cv2.imshow('Canny Edges', canny_edges)
cv2.waitKey(0)
Kameradan Gerçek Zamanlı Video Akışı Alma
Kamera donanımına veya RTSP (Real-Time Streaming Protocol) yayınlarına bağlanarak video akışından kare kare görüntü okumak için cv2.VideoCapture() sınıfı kullanılır:
# 0, varsayılan sistem web kamerasını temsil eder
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Hata: Kamera kaynağına bağlanılamadı.")
exit()
while True:
# Kamera sensöründen tek bir frame oku
ret, frame = cap.read()
if not ret:
print("Hata: Görüntü okunamıyor.")
break
# Görüntüyü gerçek zamanlı pencerede render et
cv2.imshow('Live Stream', frame)
# 'q' tuşuna basıldığında döngüden çık
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Donanım kaynaklarını serbest bırak
cap.release()
cv2.destroyAllWindows()
OpenCV'nin derinliklerine ve gerçek zamanlı uygulamalarına adım attıktan sonra, bu kütüphaneyi tek kartlı bilgisayarlarla birleştirerek pratik donanım projeleri geliştirmek isterseniz Raspberry Pi ile WSPR Beacon (İşaretçi) başlıklı mühendislik rehberimizi inceleyebilirsiniz.
Resmi opencv GitHub reposuna buradan ulaşabilirsiniz.
Yorum yapma özelliği, forum tarafından gelen istek sebebiyle kapatılmıştır. Lütfen tartışmalar ve sorularınız için topluluk forumumuza katılın.


(\theta)![Rendered by QuickLaTeX.com şu şekilde tanımlanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-424dc1707a56aa782f9a64d7f6c45bb2_l3.png" height="42" width="272" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[M = \begin{bmatrix} \alpha & \beta & (1-\alpha) \cdot x_c - \beta \cdot y_c \\ -\beta & \alpha & \beta \cdot x_c + (1-\alpha) \cdot y_c \end{bmatrix}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Burada](https://devreyakan.com/wp-content/ql-cache/quicklatex.com-639d67b2590d5e81322150a9003a571f_l3.png)
![Rendered by QuickLaTeX.com ) haritalanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-e6d460931df8c376e85eac92208846bb_l3.png" height="64" width="103" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[\begin{bmatrix} x' \\ y' \end{bmatrix} = M \begin{bmatrix} x \\ y \\ 1 \end{bmatrix}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> OpenCV ile bu işlemi gerçekleştiren kod yapısı şöyledir: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") height, width = img.shape[:2] # Dönüşüm merkezini ve parametreleri tanımla: 70 derece dönüş, 0.5 kat küçültme rotation_matrix = cv2.getRotationMatrix2D((width / 2, height / 2), 70, 0.5) # Affine dönüşümü uygula rotated_image = cv2.warpAffine(img, rotation_matrix, (width, height)) cv2.imshow('Rotated Image', rotated_image) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Çözünürlüğü ve İşlem Hızı Optimizasyonu</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Gerçek zamanlı video işleme sistemlerinde performans yönetimi kritik bir faktördür. Piksel tabanlı görüntü analizi karmaşık algoritmalar içerdiğinde işlem süresi hızlı bir şekilde artar. Örneğin, Full HD (](https://devreyakan.com/wp-content/ql-cache/quicklatex.com-bb64f4b05a78751209081d6db7f3bb2d_l3.png)
![Rendered by QuickLaTeX.com hızında işlenmesi durumunda saniyelik veri bant genişliği şu şekilde hesaplanır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-3749d7b67fb59bb52eb5b7c3bc56e8f3_l3.png" height="19" width="595" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[\text{Bant Genişliği} = 1920 \times 1080 \times 3 \text{ byte} \times 30 \text{ frame/s} \approx 186.6 \text{ MB/s} \approx 1.49 \text{ Gbps}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Özellikle gömülü sistemlerde (Örn: Raspberry Pi, BeagleBone) bu büyüklükte bir veriyi gerçek zamanlı işlemek ciddi darboğazlara neden olur ve karesel gecikmelere (frame drop) yol açar. Bu nedenle pratik projelerde şu optimizasyon teknikleri uygulanır: <!-- /wp:paragraph --> <!-- wp:list --> <ul class="wp-block-list"><!-- wp:list-item --> <li><strong>Çözünürlük Düşürme (Resizing):</strong> İşlem öncesinde görüntü <code>cv2.resize()</code> ile daha düşük boyutlara (Örn:](https://devreyakan.com/wp-content/ql-cache/quicklatex.com-81cdca6158b2b47cf67cec59959716ef_l3.png)
I![Rendered by QuickLaTeX.com ile taranır: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-fadfec4ec85aa01f8a341a20b2d5d259_l3.png" height="56" width="363" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[I_{\text{filtered}}(x, y) = \sum_{i=-k}^{k} \sum_{j=-k}^{k} I(x-i, y-j) \cdot K(i, j)\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:paragraph --> Burada](https://devreyakan.com/wp-content/ql-cache/quicklatex.com-11c60fd4538336ef987c4c7bf31c03f6_l3.png)
![Rendered by QuickLaTeX.com boyutunda bir ortalama alma (box filter) filtresinin kernel yapısı şöyledir: <!-- /wp:paragraph --> <!-- wp:paragraph --> <span class="ql-right-eqno"> </span><span class="ql-left-eqno"> </span><img src="https://devreyakan.com/wp-content/ql-cache/quicklatex.com-433e42ecbb6647062d9643049309ffba_l3.png" height="97" width="212" class="ql-img-displayed-equation quicklatex-auto-format" alt="\[K = \frac{1}{49} \begin{bmatrix} 1 & 1 & \dots & 1 \\ 1 & 1 & \dots & 1 \\ \vdots & \vdots & \ddots & \vdots \\ 1 & 1 & \dots & 1 \end{bmatrix}_{7 \times 7}\]" title="Rendered by QuickLaTeX.com"/> <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>import numpy as np img = cv2.imread("devreyakan.jpg") # 7x7 boyutunda ortalama kernel oluştur kernel = np.ones((7, 7), np.float32) / 49 # 2D konvolüsyon filtresini görüntüye uygula blurred = cv2.filter2D(img, -1, kernel) cv2.imshow('Blurred Image', blurred) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Piramidi (pyrDown / pyrUp)</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Görüntü piramitleri, çözünürlük ölçeklemesinde piksellerin kaybolmasını engellemek için Gaussian filtreleme ile altörneklemeyi (subsampling) bir arada yürütür: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") # Çözünürlüğü yarıya indirir ve Gaussian yumuşatma uygular smaller = cv2.pyrDown(img) # Çözünürlüğü iki katına çıkarır larger = cv2.pyrUp(img) cv2.imshow('Original', img) cv2.imshow('Smaller', smaller) cv2.imshow('Larger', larger) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Görüntü Kırpma (Slicing)</h3> <!-- /wp:heading --> <!-- wp:paragraph --> NumPy matris dilimleme (slicing) yöntemiyle görüntünün belirli bir Bölge İlgi Alanı (ROI - Region of Interest) kesilip alınabilir: <!-- /wp:paragraph --> <!-- wp:code --> <pre class="wp-block-code"><code>img = cv2.imread("devreyakan.jpg") height, width = img.shape[:2] # Görüntünün merkez alanından %50'lik bölgeyi kırp start_row, start_col = int(height * 0.15), int(width * 0.15) end_row, end_col = int(height * 0.65), int(width * 0.65) cropped = img[start_row:end_row, start_col:end_col] cv2.imshow('Cropped ROI', cropped) cv2.waitKey(0)</code></pre> <!-- /wp:code --> <!-- wp:heading {"level":3,"className":"wp-block-heading"} --> <h3 class="wp-block-heading">Kenar Tespiti ve Canny Algoritması</h3> <!-- /wp:heading --> <!-- wp:paragraph --> Kenar bulma işlemlerinde en gelişmiş yöntemlerden biri <strong>Canny Kenar Algoritmasıdır</strong>. Algoritma temel olarak 4 aşamadan oluşur: <!-- /wp:paragraph --> <!-- wp:list --> <ul class="wp-block-list"><!-- wp:list-item --> <li><strong>Gürültü Azaltma:</strong> Görüntüye Gaussian filtresi uygulanarak yüksek frekanslı gürültüler elenir.</li> <!-- /wp:list-item --> <!-- wp:list-item --> <li><strong>Yoğunluk Gradyanlarının Hesaplanması:</strong> Sobel filtreleri kullanılarak yatay (](https://devreyakan.com/wp-content/ql-cache/quicklatex.com-3571c436c001acc1ec35b299bbb514c6_l3.png)