Python fotograf netlestirme

Arkadaslar merhaba elimde bir fotograf var, bir kagidin fotografi. Yazilar okunabiliyor, ama net degil. Bunu netlestirecek python algoritmasi ya da websitesi var midir? Tesekkurler simdiden

Netleştirmek derken bulanıklığı mı gidermek istiyorsunuz yoksa düşük çözünürlükten kaynaklanan sıkıntıyı mı gidermek istiyorsunuz?

1 Beğeni

bulanıklık giderme. Elimdeki fotoğraf bir belge ve bazı yazılar okunabiliniyor ama bulanık. Onları netleştirmek istiyorum.

Belki çok işinize yaramaz ama, aradaki ton farklılıklarını artırarak* yazının okunurluğunu artırabilen bir şeyler kodlayabildim.
Before/After şu şekildedir:



İşleyişi şu şekilde, cv2 ile fotoğrafı/Resimi açıyoruz. Her bir pikselin RGB değerini (Aslında BGR) alıyoruz. Sonrasında görseli siyah beyaza çeviriyoruz. En sonda ise BGR değerlerinin her biri 125’e eşit veya 125’ten küçük olan pikselleri tamamen (0, 0, 0)'a yani tamamen siyaha eşitliyoruz. 125 değerini kendi görsellerinize göre değiştirebilirsiniz.

import cv2


class Image:
    def __init__(self, image):
        self.image_name = image
        self.image = cv2.imread(image)
        self.height, self.width = (self.image.shape[0], self.image.shape[1])
        self.default_sizes = self.height, self.width

    def update_size(self):
        self.height, self.width = (self.image.shape[0], self.image.shape[1])

    def return_to_default(self):
        self.image = cv2.imread(self.image_name)
        self.height, self.width = self.default_sizes

    def resize(self, scale_percent):
        self.width = int(self.width * scale_percent / 100)
        self.height = int(self.height * scale_percent / 100)
        self.image = cv2.resize(self.image, (self.width, self.height))

    def show(self, title):
        cv2.imshow(title, self.image)
        cv2.waitKey(0)

    def convert_to_grayscale(self):
        for y in range(self.height):
            for x in range(self.width):
                b, g, r = self.image[y, x]
                s = sum((b, g, r)) // 3
                b, g, r = s, s, s
                self.image[y, x] = b, g, r

    def save(self, title):
        cv2.imwrite(title, self.image)

    def netlestir(self):
        for y in range(self.height):
            for x in range(self.width):
                try:
                    b, g, r = self.image[y, x]
                    if b <= 125 and g <= 125 and r <= 125:
                        self.image[y, x] = (0, 0, 0)
                except IndexError:
                    continue


img = Image("before.jpg")
img.show("sayfa")
img.convert_to_grayscale()
img.show("siyahbeyaz")
img.netlestir()
img.show("netlestirilmis")
img.save("after.jpg")

İşlem esnasında kullanılmayan bazı fonksiyonlar var, oralara takılmayın.

5 Beğeni

Merhaba, yanlış bilmiyorsam yaptığınız işlem, thresholding olarak geçiyor. Yanılmıyorum değil mi?

https://docs.opencv.org/master/d7/d4d/tutorial_py_thresholding.html

1 Beğeni

Açıkçası işlemin adı hakkında herhangi bir bilgim yok. Yazı okunurluğunu nasıl artırırım diye düşünürken böyle bir yöntem aklıma geldi :slight_smile:

1 Beğeni

deneme fırsatım yok şu anda ama bir soru sormak istiyorum,

Burada resmi siyah beyaz yapınca yanılmıyorsam b,g r pikselleri yerine tek piksel oluyor diye biliyorum, yani b, g,r değerlerinin birini kontrol etmek yerine hepsini kontrol etmek gereksiz geliyor bana, bu arada müsait bir zamanda kodunuzu da deneyeceğim, o zaman daha iyi anlarım bu durumu sanırım.

Bu arada tebrik ederim ellerine sağlık, düşünceni sevdim :+1::ok_hand:

2 Beğeni
1 Beğeni