OpenCV | python Olmadan Görüntü İşleme

| | | | | | | | | | | | | | | | | |

OpenCV`nin görüntülerle çalışmak için yaygın olarak kullanıldığını ve bunun için çok çeşitli işlevlere sahip olduğunu biliyoruz. Ama ya görüntü dosyalarını OpenCV gibi herhangi bir harici kitaplık kullanmadan işlemek istiyorsak. Bunu nasıl yapabileceğimize bir bakalım.

Görüntü ölçekleme (en yakın komşu enterpolasyonu kullanılarak):

En yakın komşu enterpolasyonu — enterpolasyon yapmanın en kolay yolu budur. Bu yöntem basitçe "en yakın" komşu pikseli belirler ve yoğunluğu için bir değer alır.

Genişliği w ve yüksekliği — p > m ve q > n. Şimdi iki ölçekleme sabitine ihtiyacımız var:

scale_x = p / w scale_y = q / h 

Artık çıktı görüntüsündeki tüm pikselleri yineliyoruz, orijinal piksellere atıfta bulunuyoruz. dan kopyalıyorlar. kontrol değişkenlerimizi scale_x ve scale_y ile ölçeklendirme ve elde edilen ölçeklenmiş indeks değerlerini yuvarlama.

Görsel temsil:
Görüntü 3X3 pikseldir (toplam 9 piksel), şimdi görüntü boyutunu 6X6`ya çıkarmak istiyorsak, en yakın komşu algoritmaya göre 6/3 (yani 2) piksel, değer pikseli ile aynı RGB değerine sahip olmalıdır. orijinal görüntüye.

Görüntü ölçekleme programı:


< /tbody>

# matplotlib ve numpy kullanarak

import matplotlib.image as img

içe aktar npy as npy


# okunabilir görüntü konumu sağlayın

m = img.imread ( "taj.png " );


# orijinal görüntünün uzunluğunu tanımlama

w , h = m.shape [: 2 < kod sınıfı = "düz">];


# xNew ve yNew yeni genişlik ve
# resim yüksekliği gerekli
ölçeklemeden sonra

xNew = int (w * 1 / 2 );

yNew = int (h * 1 / 2 );


# ölçekleme faktörünü hesaplayın
# 2 pikselden fazla çalışın

xScale = xNew / (w - 1 );

yScale = yYeni / (h - 1 < /kod> );


# numpy kullanarak, xNew matrisini alarak
# genişlik ve yeni yükseklik
ile # 4 nitelik [alfa, B, G, B] değerleri ‚Äã‚Äã

newImage = npy.zeros ([xNew, yNew, 4 ]);


için i için aralık (xNew - 1 ):

için j aralığında (yNew - 1 ):

yeniResim [ i + 1 , j + 1 ] = m [ 1 + int (i / xScale),

1 + int (j / yScale)]


# Ölçeklemeden sonra görüntüyü kaydet

img.imsave ( `scaled.png ` , newImage);

Çıktı:

Görüntüyü gri tonlama:

Ortalamayı kullanma değer yönteminde, bu yöntem, RGB değerlerinin nelerden oluştuğunu göstermekten ziyade bir pikselin yoğunluğunu vurgular. Ortalama RGB değerini hesaplayıp bir piksel için RGB değerini atadığımızda, pikselin RGB değeri aynı olduğu için tüm renkler farklı bir RGB oranı nedeniyle üretildiğinden herhangi bir renk oluşturamayacaktır. değerler, çünkü bu durumda oran 1: 1: 1 olacaktır. Bu nedenle, oluşturulan görüntü gri bir görüntü gibi görünecektir.

Görsel temsil:

Gri tonlamalı resim programı:


# NumPy kullanarak

içe aktar npy olarak numpy


# matplotlib kullanarak

içe aktar matplotlib.image as img


# ortalamayı içe aktarmak için istatistikleri kullanın
# ortalamayı hesaplamak için

from istatistikler import demek


m = img.imread ( "taj.png" )


# orijinal resim

w, h = m .shape [: 2 ]


# piksel başına 4 öznitelikli yeni resim boyutu

newImage = npy.zeros ([w, h, 4 ])

print (w)

print (h)


için i aralığında (w):

< kod sınıfı = "anahtar kelime"> için j aralığında (h):

# RGB oranı 0 ile 1 arasında olacaktır

lst = [ kayan nokta (m [i] [j] [ 0 ]), kayan nokta (m [i] [j] [ 1 ]), kayan (m [i] [j] [ 2 ])]

ortalama = float (ortalama (lst) )

yeniResim [i] [j] [ 0 ] = ortalama

newImage [i] [j] [ 1 ] = ortalama

newImage [i] [j] [ 2 ] = avg

yeniResim [i] [j] [ 3 ] = 1 # alfa değeri olmalıdır 1


# Resmi imsave ile kaydedin

img.imsave ( `grayedImage.png` , newImage)

Çıktı:

Görüntüyü kırpma:

Kırpma temelde kaldırır istenmeyen piksel.Bu, gerekli pikseli, kırpıldıktan sonra boyutu gerekli olanla eşleşen başka bir resim ızgarasına yerleştirerek yapılabilir.

10 √ó 10 piksel boyutunda bir resim düşünün ve eğer sadece 4 √ó 4 piksel boyutunda bir görüntünün merkezini kırpmak istiyoruz, o zaman (3, 3)`ten başlayarak 4 piksele kadar ‚Äã‚Äã`dan (10-4) / 2 piksel değerlerini toplamamız gerekiyor x yönünde ve 4 piksel y yönünde.

Görsel gösterim:

Resim kırpıcı:


# matplotlib ve numpy kullanarak

import matplotlib.image img olarak

import npy olarak numpy


# m değişkeninde görüntü oku

m = img.imread ( "taj.png" )


# görüntü boyutunun tanımı genişlik (w) yükseklik (h)

w, h = m.shape [: 2 ]


# kırpıldıktan sonra gerekli resim boyutu

xNew = int (w * 1 / 4 )

yNew = int (h * 1 / 4 )

newImage = npy.zeros ([xNew, yNew, 4 ])


# yazdırma genişliği kaynak resim yüksekliği

yazdır (w)

yazdır (h)


için i aralığında ( 1 , xNew):

için j aralığında ( 1 , yNew):

# orijinal görüntünün 100`den 100 pikseline kadar kırpın

newImage [i, j] = m [ 100 + i, 100 + j]


# resmi kaydet

img.imsave ( `cropped.png` , newImage)

Çıktı: