沒有 OpenCV 的圖像處理 | Python

| | | | | | | | | |

我們知道 OpenCV 廣泛用於處理圖像,並為此提供了廣泛的功能。但是,如果我們想在不使用任何外部庫(如 OpenCV)的情況下處理圖像文件怎麼辦。讓我們看看如何做到這一點。

圖像縮放(使用最近鄰插值):

最近鄰插值 —這是最簡單的插值方法。此方法只是確定“最近”的相鄰像素並為其強度取一個值。

考慮一個寬度為 w 且高度為 — 的小圖像。 h 我們想要從寬度 p 更改為寬度 q,假設 p> m 和 q > n.現在我們需要兩個縮放常數:

scale_x = p / w scale_y = q / h 

現在我們簡單地迭代輸出圖像中的所有像素,參考我們的原始像素正在復制。使用 scale_xscale_y 縮放我們的控制變量,並對生成的縮放索引值進行四捨五入。

視覺表示:
圖像是3X3像素(共9像素),現在如果我們想將圖像尺寸增加到6X6,那麼根據最近鄰算法6/3(即2)像素應該與值像素具有相同的RGB值到原始圖像。

圖片縮放程序:


# 使用 matplotlib 和 numpy

import matplotlib.image as img

導入 <代碼類= "plain"> numpy as npy


# 提供圖像位置可讀

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


# 定義原圖的長度

w , h = m.shape [: 2 <代碼類=“普通”>];


# xNew 和 yNew 是新的寬度和
# 需要的圖像高度
縮放後

xNew = int (w * 1 / 2 );

yNew = int (h * 1 / 2 );


# 計算縮放因子
# 工作超過2個像素

xScale = xNew / (w - 1 );

yScale = yNew / (h - 1 );


# 使用 numpy,取 xNew 矩陣
# 寬度和新高度with
#4 個屬性 [alpha, B, G, B] values ,Äã,Äã

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


for i in range (xNew - 1 ):

for j in range (yNew - 1 ):

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

1 + int (j / yScale)]


# 縮放後保存圖片

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

輸出:

灰度圖像:

使用均值value 方法,這種方法強調像素的強度,而不是顯示 RGB 值是由什麼組成的。當我們計算平均RGB值並為它分配一個像素的RGB值時,由於像素的RGB值相同,因此無法創建任何顏色,因為所有顏色都是由於RGB的不同比例而產生的值,因為在這種情況下,比率將為 1:1:1。因此,渲染後的圖像看起來像灰色圖像。

視覺表示:

灰度圖像程序:


# 使用 NumPy

import numpy as npy


# 使用 matplotlib

import matplotlib.image as img


# 使用統計數據導入平均值
# 計算平均值

from 統計 導入 意思


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


# 定義寬高原圖

w, h = m .shape [: 2 ]


# 新的圖像尺寸,每個像素有 4 個屬性

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

print (w)

print (h)


for i in range (w):

for j in range (h):

# RGB 比例將在 0 和 1 之間

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

avg = float (意思是 (lst) )

newImage [i] [j] [ 0 ] = avg

newImage [i] [j] [ 1 ] = avg

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

newImage [i] [j] [ 3 ] = 1 #alpha值必須是1


# 使用 imsave 保存圖片

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

< /tbody>

輸出:

裁剪圖像:

裁剪基本上去除不需要的像素。這可以通過將所需像素放置在另一個圖像網格中來完成,其大小在裁剪後與所需像素相匹配。

考慮一個大小為 10 √ó 10 像素的圖像,如果我們只想裁剪大小為 4 √ó 4 像素的圖像的中心,然後我們需要從 (10-4) / 2 收集像素值,從 (3, 3) 開始,最多 4 像素x 方向y 方向 4 個像素。

視覺表示:

圖像裁剪器:


# 使用 matplotlib 和 numpy

import matplotlib.image as img

import numpy as npy


# 讀取變量 m 中的圖像

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


# 定義圖片尺寸寬度(w) 高度(h)

w, h = m.shape [: 2 ]


# 裁剪後所需的圖像大小

xNew = int (w * 1 / 4 )

yNew = int (h * 1 / 4 )

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


# 打印寬度源圖片高度

打印 (w)

print (h)


for i in range ( 1 , xNew):

for j in range ( 1 , yNew):

# 裁剪原始圖像的 100 到 100 像素

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


# 保存圖片

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

輸出:

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


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