EEM-241 İleri Düzey Programlama
2024-2025 Güz Dönemi
Ders 12 - OpenCV (1. ders)
import cv2
import numpy as np
Bu çalışmada images klasöründe bulunan image.jpg görüntüsü kullanılmıştır. İndirmek için tıklayınız.
img=cv2.imread("images/image.jpg")
- opencv bir görüntüyü BGR formatında okur.
img
array([[[ 37, 40, 48],
[ 42, 45, 53],
[ 43, 49, 56],
...,
[ 55, 55, 55],
[ 53, 53, 53],
[ 53, 53, 53]],
[[ 40, 43, 51],
[ 44, 47, 55],
[ 46, 52, 59],
...,
[ 59, 59, 59],
[ 58, 57, 59],
[ 56, 58, 58]],
[[ 41, 46, 55],
[ 47, 52, 61],
[ 52, 57, 66],
...,
[ 63, 65, 66],
[ 62, 63, 67],
[ 59, 63, 64]],
...,
[[ 52, 137, 93],
[ 45, 130, 86],
[ 40, 125, 81],
...,
[ 53, 127, 85],
[ 57, 130, 90],
[ 57, 130, 90]],
[[ 58, 140, 97],
[ 60, 142, 99],
[ 51, 133, 90],
...,
[ 58, 132, 90],
[ 64, 137, 97],
[ 64, 137, 97]],
[[ 52, 134, 91],
[ 60, 142, 99],
[ 49, 131, 88],
...,
[ 57, 131, 89],
[ 52, 125, 85],
[ 52, 125, 85]]], dtype=uint8)
- Resmi bir pencerede görüntülemek için:
cv2.imshow('image',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- okunan görüntüyü bilgisayara kaydetmek için:
cv2.imwrite("a.png", img)
True
type(img)
numpy.ndarray
img.shape
(280, 450, 3)
img.dtype
dtype('uint8')
# bir pikselin alabileceği farklı değerleri sayısı:
256*256*256
16777216
280*450*3
378000
img.size
378000
yukseklik, genislik, kanal = img.shape
yukseklik, genislik, kanal
(280, 450, 3)
- Görüntüyü gri tonlamalı olarak okumak için:
img_g=cv2.imread("images/image.jpg",0)
img_g.shape
(280, 450)
cv2.imshow('image',img_g)
cv2.waitKey(0)
cv2.destroyAllWindows()
img[:3,:3,:]
array([[[37, 40, 48],
[42, 45, 53],
[43, 49, 56]],
[[40, 43, 51],
[44, 47, 55],
[46, 52, 59]],
[[41, 46, 55],
[47, 52, 61],
[52, 57, 66]]], dtype=uint8)
img_g[:3,:3]
array([[42, 47, 50],
[45, 49, 53],
[48, 54, 59]], dtype=uint8)
- fareye tıklama olaylarının algılanması için aşağıdaki şablon programı kullanacağız.
def mouse_event(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x,y)
img=cv2.imread("images/image.jpg")
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
67 58
290 71
200 139
def mouse_event(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x,y)
print(f"x:{x},y:{y} koordinatındaki piksel değeri:\n {img[y,x]}")
img=cv2.imread("images/image.jpg")
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
23 10
x:23,y:10 koordinatındaki piksel değeri:
[ 9 10 8]
372 259
x:372,y:259 koordinatındaki piksel değeri:
[217 230 222]
214 165
x:214,y:165 koordinatındaki piksel değeri:
[ 73 37 175]
217 251
x:217,y:251 koordinatındaki piksel değeri:
[152 59 38]
53 241
x:53,y:241 koordinatındaki piksel değeri:
[ 37 140 89]
116 255
x:116,y:255 koordinatındaki piksel değeri:
[ 78 245 236]
- bir piksel değerine ulaşmak için:
img[255,116]
array([ 78, 245, 236], dtype=uint8)
- resmi bgr formatından gri tonlamalı renge çevirmek için:
img_gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
img_gray
array([[ 42, 47, 50, ..., 55, 53, 53],
[ 45, 49, 53, ..., 59, 58, 58],
[ 48, 54, 59, ..., 65, 64, 63],
...,
[114, 107, 102, ..., 106, 110, 110],
[118, 120, 111, ..., 111, 117, 117],
[112, 120, 109, ..., 110, 105, 105]], dtype=uint8)
def mouse_event(event,x,y,flags,param):
if event == cv2.EVENT_LBUTTONDOWN:
print(x,y)
print(f"x:{x},y:{y} koordinatındaki piksel değeri:\n {img[y,x]}")
print(f"koordinatlardaki grayscale piksel değeri: {img_gray[y,x]}")
img=cv2.imread("images/image.jpg")
img_gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
374 264
x:374,y:264 koordinatındaki piksel değeri:
[222 233 225]
koordinatlardaki grayscale piksel değeri: 229
207 22
x:207,y:22 koordinatındaki piksel değeri:
[27 20 17]
koordinatlardaki grayscale piksel değeri: 20
- görüntünü bir parçası
img=cv2.imread("images/image.jpg")
part=img[100:270, 120:280, :]
cv2.imshow('Parça',part)
cv2.waitKey(0)
cv2.destroyAllWindows()
tiklama_sayisi=0
def mouse_event(event,x,y,flags,param):
global tiklama_sayisi
if event == cv2.EVENT_LBUTTONDOWN:
tiklama_sayisi += 1
img=cv2.imread("images/image.jpg")
img_gray= cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
print(tiklama_sayisi)
10
tiklama_sayisi=0
sol_ust_i=None
sol_ust_j=None
sag_alt_i=None
sag_alt_j=None
def mouse_event(event,x,y,flags,param):
global tiklama_sayisi, sol_ust_i, sol_ust_j, sag_alt_i, sag_alt_j
if event == cv2.EVENT_LBUTTONDOWN:
if tiklama_sayisi == 0:
sol_ust_i = y
sol_ust_j = x
print("0",sol_ust_i, sol_ust_j)
if tiklama_sayisi == 1:
sag_alt_i = y
sag_alt_j = x
print("1",sag_alt_i, sag_alt_j)
tiklama_sayisi += 1
img=cv2.imread("images/image.jpg")
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
parca = img[sol_ust_i:sag_alt_i, sol_ust_j:sag_alt_j, :]
cv2.imshow('Parça',parca)
cv2.waitKey(0)
cv2.destroyAllWindows()
0 56 168
1 106 218
- resim üzerindeki bir parçayı başka bir yere yapıştırmak
img[56:106, 300:350] = parca
cv2.imshow('Resim',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
img[56:106, 300:350] = parca
img[56:106,168:218]=255
cv2.imshow('Resim',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
- sol üst, sağ alt koordinatlara tıklanması sonrası elde edilen bölgeyi 3. tıklanılan yere yapıştıran kod.
tiklama_sayisi=0
sol_ust_i=None
sol_ust_j=None
sag_alt_i=None
sag_alt_j=None
def mouse_event(event,x,y,flags,param):
global tiklama_sayisi, sol_ust_i, sol_ust_j, sag_alt_i, sag_alt_j
global img
if event == cv2.EVENT_LBUTTONDOWN:
if tiklama_sayisi == 0:
sol_ust_i = y
sol_ust_j = x
print("0",sol_ust_i, sol_ust_j)
if tiklama_sayisi == 1:
sag_alt_i = y
sag_alt_j = x
print("1",sag_alt_i, sag_alt_j)
if tiklama_sayisi == 2:
genislik = sag_alt_j-sol_ust_j
yukseklik = sag_alt_i - sol_ust_i
i=y
j=x
img[i:i+yukseklik, j:j+genislik] = img[sol_ust_i:sag_alt_i,sol_ust_j:sag_alt_j]
tiklama_sayisi += 1
img=cv2.imread("images/image.jpg")
cv2.imshow('Resim',img)
cv2.setMouseCallback('Resim',mouse_event)
cv2.waitKey(0)
cv2.destroyAllWindows()
cv2.imshow('Resim',img)
cv2.waitKey(0)
cv2.destroyAllWindows()
0 221 82
1 269 142