File size: 8,944 Bytes
879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 64caca7 879f916 793d19b 879f916 2488c8f 879f916 2488c8f 879f916 64caca7 879f916 64caca7 879f916 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 |
import cv2
import numpy as np
import gradio as gr
# Farklı filtre fonksiyonları
def apply_gaussian_blur(frame):
return cv2.GaussianBlur(frame, (15, 15), 0)
def apply_sharpening_filter(frame):
kernel = np.array([[0, -1, 0], [-1, 5,-1], [0, -1, 0]])
return cv2.filter2D(frame, -1, kernel)
def apply_edge_detection(frame):
return cv2.Canny(frame, 100, 200)
def apply_invert_filter(frame):
return cv2.bitwise_not(frame)
def adjust_brightness_contrast(frame, alpha=1.0, beta=50):
return cv2.convertScaleAbs(frame, alpha=alpha, beta=beta)
def apply_grayscale_filter(frame):
return cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
def apply_sepia_filter(frame):
sepia_filter = np.array([[0.272, 0.534, 0.131],
[0.349, 0.686, 0.168],
[0.393, 0.769, 0.189]])
return cv2.transform(frame, sepia_filter)
def apply_bilateral_filter(frame):
return cv2.bilateralFilter(frame, 9, 75, 75)
def apply_darkening_filter(frame, alpha=0.5):
return cv2.convertScaleAbs(frame, alpha=alpha, beta=0)
def apply_histogram_equalization(frame):
if len(frame.shape) == 2: # Grayscale
return cv2.equalizeHist(frame)
else:
ycrcb = cv2.cvtColor(frame, cv2.COLOR_BGR2YCrCb)
channels = cv2.split(ycrcb)
cv2.equalizeHist(channels[0], channels[0])
ycrcb = cv2.merge(channels) # Burada düzeltme yapıldı
return cv2.cvtColor(ycrcb, cv2.COLOR_YCrCb2BGR)
def apply_median_blur(frame):
return cv2.medianBlur(frame, 15)
def apply_dilation(frame, kernel_size=5):
kernel = np.ones((kernel_size, kernel_size), np.uint8)
return cv2.dilate(frame, kernel, iterations=1)
def apply_erosion(frame, kernel_size=5):
kernel = np.ones((kernel_size, kernel_size), np.uint8)
return cv2.erode(frame, kernel, iterations=1)
def apply_line_detection(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray, 50, 150, apertureSize=3)
lines = cv2.HoughLines(edges, 1, np.pi/180, 200)
if lines is not None:
for rho, theta in lines[:,0]:
a = np.cos(theta)
b = np.sin(theta)
x0 = a * rho
y0 = b * rho
x1 = int(x0 + 1000 * (-b))
x2 = int(x0 - 1000 * (-b))
y1 = int(y0 + 1000 * (a))
y2 = int(y0 - 1000 * (a))
cv2.line(frame, (x1, y1), (x2, y2), (0, 0, 255), 2)
return frame
def apply_contour_detection(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
edged = cv2.Canny(blurred, 50, 150)
contours, _ = cv2.findContours(edged, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
cv2.drawContours(frame, contours, -1, (0, 255, 0), 2)
return frame
def apply_box_blur(frame):
return cv2.blur(frame, (15, 15))
def apply_emboss_filter(frame):
kernel = np.array([[-2, -1, 0], [-1, 1, 1], [0, 1, 2]])
return cv2.filter2D(frame, -1, kernel)
def apply_sobel_edge_detection(frame):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
sobelx = cv2.Sobel(gray, cv2.CV_64F, 1, 0, ksize=5)
sobely = cv2.Sobel(gray, cv2.CV_64F, 0, 1, ksize=5)
sobel = cv2.addWeighted(sobelx, 0.5, sobely, 0.5, 0)
return cv2.convertScaleAbs(sobel)
def apply_thresholding(frame, threshold_value=127):
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
_, thresh = cv2.threshold(gray, threshold_value, 255, cv2.THRESH_BINARY)
return thresh
def apply_color_quantization(frame, k=8):
Z = frame.reshape((-1, 3))
Z = np.float32(Z)
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 10, 1.0)
_, label, center = cv2.kmeans(Z, k, None, criteria, 10, cv2.KMEANS_RANDOM_CENTERS)
center = np.uint8(center)
res = center[label.flatten()]
return res.reshape((frame.shape))
# Filtre açıklamaları
filter_descriptions = {
"Gaussian Blur": "Resmi bulanıklaştırır. Bu filtre, resimdeki gürültüyü azaltmak için kullanılır.",
"Sharpen": "Resmi netleştirir. Bu filtre, resimdeki kenarları daha belirgin hale getirir.",
"Edge Detection": "Canny Edge Detection algoritmasını kullanarak resimdeki kenarları tespit eder.",
"Invert": "Resmin renklerini tersine çevirir.",
"Brightness": "Resmin parlaklığını ve kontrastını ayarlar.",
"Grayscale": "Resmi gri tonlamalı hale getirir.",
"Sepia": "Resmi sepiya tonlarıyla işler.",
"Bilateral": "Kenar koruyarak resmi bulanıklaştırır.",
"Darkening": "Resmi karartır.",
"Histogram Equalization": "Resmin histogramını eşitleyerek kontrastı artırır.",
"Median Blur": "Medyan filtresi ile resmi bulanıklaştırır. Bu filtre, gürültüyü azaltmak için kullanılır.",
"Dilation": "Resimdeki beyaz bölgeleri genişletir.",
"Erosion": "Resimdeki beyaz bölgeleri daraltır.",
"Line Detection": "Hough dönüşümü ile resimdeki doğruları tespit eder.",
"Contour Detection": "Resimdeki konturları tespit eder ve çizer.",
"Box Blur": "Basit bir bulanıklaştırma filtresi.",
"Emboss": "Resmi kabartma efektiyle işler.",
"Sobel Edge Detection": "Sobel operatörü ile kenarları tespit eder.",
"Thresholding": "Eşikleme ile resmi ikili (siyah-beyaz) hale getirir.",
"Color Quantization": "Renk sayısını azaltarak resmi daha basit bir renk paletiyle gösterir."
}
# Filtre uygulama fonksiyonu
def apply_filter(filter_type, input_image=None):
if input_image is not None:
frame = input_image
else:
cap = cv2.VideoCapture(0)
ret, frame = cap.read()
cap.release()
if not ret:
return "Web kameradan görüntü alınamadı"
if filter_type == "Gaussian Blur":
return apply_gaussian_blur(frame)
elif filter_type == "Sharpen":
return apply_sharpening_filter(frame)
elif filter_type == "Edge Detection":
return apply_edge_detection(frame)
elif filter_type == "Invert":
return apply_invert_filter(frame)
elif filter_type == "Brightness":
return adjust_brightness_contrast(frame, alpha=1.0, beta=50)
elif filter_type == "Grayscale":
return apply_grayscale_filter(frame)
elif filter_type == "Sepia":
return apply_sepia_filter(frame)
elif filter_type == "Bilateral":
return apply_bilateral_filter(frame)
elif filter_type == "Darkening":
return apply_darkening_filter(frame)
elif filter_type == "Histogram Equalization":
return apply_histogram_equalization(frame)
elif filter_type == "Median Blur":
return apply_median_blur(frame)
elif filter_type == "Dilation":
return apply_dilation(frame)
elif filter_type == "Erosion":
return apply_erosion(frame)
elif filter_type == "Line Detection":
return apply_line_detection(frame)
elif filter_type == "Contour Detection":
return apply_contour_detection(frame)
elif filter_type == "Box Blur":
return apply_box_blur(frame)
elif filter_type == "Emboss":
return apply_emboss_filter(frame)
elif filter_type == "Sobel Edge Detection":
return apply_sobel_edge_detection(frame)
elif filter_type == "Thresholding":
return apply_thresholding(frame)
elif filter_type == "Color Quantization":
return apply_color_quantization(frame)
# Gradio arayüzü
with gr.Blocks() as demo:
gr.Markdown("# Web Kameradan ya da Yüklenen Fotoğraftan Canlı Filtreleme")
# Filtre seçenekleri
filter_type = gr.Dropdown(
label="Filtre Seçin",
choices=list(filter_descriptions.keys()),
value="Gaussian Blur"
)
# Filtre açıklaması
filter_description = gr.Markdown(label="Filtre Açıklaması", value=filter_descriptions["Gaussian Blur"])
# Görüntü yükleme alanı
input_image = gr.Image(label="Resim Yükle", type="numpy", height=300, width=300)
# Çıktı için görüntü
output_image = gr.Image(label="Filtre Uygulandı", height=300, width=300)
# Giriş ve çıkış resimlerini yan yana gösterme
with gr.Row():
with gr.Column(scale=1):
gr.Markdown("### Giriş Resmi")
input_image
with gr.Column(scale=1):
gr.Markdown("### Çıkış Resmi")
output_image
# Filtre seçildiğinde açıklamayı güncelleme
def update_description(filter_type):
return filter_descriptions[filter_type]
filter_type.change(fn=update_description, inputs=filter_type, outputs=filter_description)
# Resim yüklendiğinde veya filtre değiştirildiğinde otomatik olarak filtre uygulama
input_image.change(fn=apply_filter, inputs=[filter_type, input_image], outputs=output_image)
filter_type.change(fn=apply_filter, inputs=[filter_type, input_image], outputs=output_image)
# Gradio arayüzünü başlat
demo.launch() |