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ı:

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers

News


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method