我們知道 OpenCV 廣泛用於處理圖像,並為此提供了廣泛的功能。但是,如果我們想在不使用任何外部庫(如 OpenCV)的情況下處理圖像文件怎麼辦。讓我們看看如何做到這一點。
圖像縮放(使用最近鄰插值):
最近鄰插值 —這是最簡單的插值方法。此方法只是確定“最近”的相鄰像素並為其強度取一個值。
考慮一個寬度為 w 且高度為 — 的小圖像。 h 我們想要從寬度 p 更改為寬度 q,假設 p> m 和 q > n.現在我們需要兩個縮放常數:
scale_x = p / w scale_y = q / h
現在我們簡單地迭代輸出圖像中的所有像素,參考我們的原始像素正在復制。使用 scale_x 和 scale_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)
輸出:
裁剪圖像:
裁剪基本上去除不需要的像素。這可以通過將所需像素放置在另一個圖像網格中來完成,其大小在裁剪後與所需像素相匹配。
考慮一個大小為 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)
輸出: