Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值
1. Numpy 相關(guān)知識(shí)
1.1 Ndarray 對(duì)象
在了解 OpenCV 的圖像對(duì)象之前我們先對(duì) NumPy 的基礎(chǔ)知識(shí)做一回顧,方便我們后續(xù)更進(jìn)一步理解圖像對(duì)象的一系列操作。
In [2]: a = np.array([[1, 2], [3,4], [5, 6]])In [3]: a
Out[3]:
array([[1, 2],[3, 4],[5, 6]])In [4]: a.shape
Out[4]: (3, 2)
這是一個(gè) 3 X 2 的矩陣。
In [5]: b = np.array([[[1, 2], [3,4], [5, 6]]])In [6]: b
Out[6]:
array([[[1, 2],[3, 4],[5, 6]]])In [7]: b.shape
Out[7]: (1, 3, 2)
這是一個(gè) 1 X 3 X 2 的矩陣。
In [8]: c = np.array([[[1, 2], [3,4], [5, 6]], [[11, 22], [33,44], [55, 66]]])In [9]: c
Out[9]:
array([[[ 1, 2],[ 3, 4],[ 5, 6]],[[11, 22],[33, 44],[55, 66]]])In [10]: c.shape
Out[10]: (2, 3, 2)
這是一個(gè) 2 X 3 X 2 的矩陣。
1.2 數(shù)據(jù)類(lèi)型
| 名稱(chēng) | 描述 |
|---|---|
| bool_ | 布爾型數(shù)據(jù)類(lèi)型(True 或者 False) |
| int_ | 默認(rèn)的整數(shù)類(lèi)型(類(lèi)似于 C 語(yǔ)言中的 long,int32 或 int64) |
| intc | 與 C 的 int 類(lèi)型一樣,一般是 int32 或 int 64 |
| intp | 用于索引的整數(shù)類(lèi)型(類(lèi)似于 C 的 ssize_t,一般情況下仍然是 int32 或 int64) |
| int8 | 字節(jié)(-128 to 127) |
| int16 | 整數(shù)(-32768 to 32767) |
| int32 | 整數(shù)(-2147483648 to 2147483647) |
| int64 | 整數(shù)(-9223372036854775808 to 9223372036854775807) |
| uint8 | 無(wú)符號(hào)整數(shù)(0 to 255) |
| uint16 | 無(wú)符號(hào)整數(shù)(0 to 65535) |
| uint32 | 無(wú)符號(hào)整數(shù)(0 to 4294967295) |
| uint64 | 無(wú)符號(hào)整數(shù)(0 to 18446744073709551615) |
| float_ | float64 類(lèi)型的簡(jiǎn)寫(xiě) |
| float16 | 半精度浮點(diǎn)數(shù),包括:1 個(gè)符號(hào)位,5 個(gè)指數(shù)位,10 個(gè)尾數(shù)位 |
numpy 的數(shù)值類(lèi)型實(shí)際上是 dtype 對(duì)象的實(shí)例,并對(duì)應(yīng)唯一的字符,包括 np.bool_,np.int32,np.float32,等等。
dtype 對(duì)象是使用以下語(yǔ)法構(gòu)造的:
numpy.dtype(object, align, copy)
- object - 要轉(zhuǎn)換為的數(shù)據(jù)類(lèi)型對(duì)象
- align - 如果為 true,填充字段使其類(lèi)似 C 的結(jié)構(gòu)體。
- copy - 復(fù)制 dtype 對(duì)象 ,如果為 false,則是對(duì)內(nèi)置數(shù)據(jù)類(lèi)型對(duì)象的引用
In [13]: dt = np.dtype(np.int32)In [14]: dt
Out[14]: dtype('int32')
2. 圖像對(duì)象創(chuàng)建與賦值
import cv2
import numpy as npimage_name = "img/003.jpg"
img = cv2.imread(image_name)
print "img is {}".format(img)
print "img is {}".format(len(img)) # img is 198
print "img is {}".format(len(img[0])) # img is 198
print "img is {}".format(len(img[0][0])) # img is 3
x1 = np.copy(img)
print x1.shape # (198, 198, 3)x2 = img
img[50:100, 100:150, :] = 255
cv2.imshow("x2", x2)
cv2.waitKey(0)
cv2.destroyAllWindows()
其中 img[50:100, 100:150, :] = 255 表示將 從圖片最頂端 50 像素- 100 像素, 從圖片最左邊 100 像素- 150 像素的全部值設(shè)置成 255 也就是純白色。
輸出結(jié)果為:
img is [[[131 190 199][107 167 173][ 82 140 145]...[ 67 125 97][ 67 125 97][ 66 124 96]][[130 187 196][109 167 173][ 88 144 149]...[ 66 124 96][ 66 124 96][ 65 123 95]][[118 170 177][104 156 162][ 90 141 144]...[ 67 125 100][ 66 124 99][ 65 123 98]]...[[ 6 73 36][ 8 75 38][ 9 73 38]...[ 44 58 30][ 45 59 31][ 46 60 32]][[ 4 68 38][ 7 71 41][ 10 71 43]...[ 41 55 27][ 42 56 28][ 44 58 30]][[ 0 63 34][ 5 69 40][ 8 69 43]...[ 39 53 25][ 40 54 26][ 41 55 27]]]
img is 198
img is 198
img is 3
(198, 198, 3)
可以看到圖片在內(nèi)存中是以 NumPy 的多維矩陣形式保存的,它是一個(gè) 198 x 198 x 3 的多維矩陣,其中 198 x 198 表示像素, 3 表示通道數(shù),也就是每個(gè)像素點(diǎn)由多少個(gè)元素組成。
原圖和執(zhí)行之后的效果圖如下
x3 = np.zeros(img.shape, img.dtype)
cv2.imshow("x3", x3)
cv2.waitKey(0)
cv2.destroyAllWindows()
圖片效果顯示
x4 = np.zeros([200, 200], np.uint8)
cv2.imshow("x4", x4)
cv2.waitKey(0)
cv2.destroyAllWindows()
效果顯示:
x5 = np.ones(shape=[512, 512, 3], dtype=np.uint8)
x5[:, :, 0] = 255
cv2.imshow("x5", x5)
cv2.waitKey(0)
cv2.destroyAllWindows()
總結(jié)
以上是生活随笔為你收集整理的Python+OpenCV 图像处理系列(8)—— Numpy 对象及图像对象创建与赋值的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python+OpenCV 图像处理系列
- 下一篇: NumPy — 创建全零、全1、空、ar