python opencv學習筆記(二)

2021-09-21 12:47:18 字數 2875 閱讀 7588

影象與原始位元組之間的轉換:

從概念上,乙個位元組能表示0到255的整數,通常乙個畫素每個通道由乙個位元組表示。

乙個opencv影象是.array型別的二維或者三維陣列。8位的灰度影象是乙個含有位元組值得二維陣列。乙個24位的bgr影象是乙個三維陣列,也包含了位元組值,可以使用表示式訪問這些值,如image[0,0]或者image[0,0,0]。第乙個值表示y座標,第二個值表示x座標,第三個值為顏色通道。還可以使用image.item((0,0))或image.setitem((0,0),128)來訪問畫素和對畫素進行操作。

若一幅影象的每個通道為8位,則可以將其顯式轉換為標準的移位python bytearray格式:

bytearray=bytearray(image)
bytearray含有恰當順序的位元組,可以通過顯式轉換和重構,得到numpy.array形式的影象:

grayimage=numpy.array(graybytearray).reshape(height,width)

bgrimage=numpy.array(bgrbytearray).reshape(height,width,3)

下面介紹乙個將含有隨機位元組bytearray轉換為灰度影象和bgr影象:

import cv2

import numpy as np

import os

randombytearray=bytearray(os.urandom(120000))

flatnumpyarray=np.array(randombytearray)

grayimage=flatnumpyarray.reshape(300,400)

cv2.imwrite('randomgray.png',grayimage)

bgrimage=flatnumpyarray.reshape(100,400,3)

cv2.imwrite('randomcolor.png',bgrimage)

結果產生灰度圖:

和彩色影象:

使用numpy.random.randint(0,256,120000).reshape(300,400)也可以並更加高效地生成numpy陣列。

使用numpy.array訪問影象資料:

y.array結構針對陣列操作有很好地優化,允許(bulk)操作。.array操作再opencv影象處理中會很方便使用,如對bgr影象的某一畫素點進行操作,轉換為白色畫素點:

用numpy.array函式來轉換陣列比普通的python陣列轉換要快得多。

方法:

import cv2

使用numpy.array的原因:numpy.array處理這類問題進過很好地優化;通過numpy的方法**可讀性更強。

下面是對通道的操作,指定某一通道的所有值置為0:

要確保這兩個區域大小相同。

numpy.array獲取影象的屬性:

結果:

(1080, 1920, 3)

6220800

uint8

其中三個屬性為:

shape:numpy返回包含寬度,高度和通道數的陣列,在除錯影象型別除錯時有用,如果影象是單色或灰度的,將不包含通道值。

size:該屬性是指影象畫素的大小

dtype:該屬性會得到影象的資料型別(通常為乙個無符號整數型的變數和該型別佔的位數,比如uint8型別)

Python OpenCV學習(十二)Haar聯級

haar特徵 haar特徵是一種反映影象的灰度變化的,畫素分模組求差值的一種特徵。它分為三類 邊緣特徵 線性特徵 中心特徵和對角線特徵。用黑白兩種矩形框組合成特徵模板,在特徵模板內用 黑色矩形畫素和 減去 白色矩形畫素和來表示這個模版的特徵值。例如 臉部的一些特徵能由矩形模組差值特徵簡單的描述,如 ...

Python Opencv學習筆記1

我選用的教材是opencv python torturial的翻譯版本,這裡給出基礎部分的學習 以及我的學習備註。import numpy as np import cv2 img cv2.imread untitled.png 0 這裡後面的引數是如何讀取這張,即以下三種情況 print cv2....

Python OpenCV學習(7) 模板匹配

利用python學習opencv,個人感覺比較方便。函式的形式與c 基本相同,所以切換過來還是比較好的,對於像我這種對python不太熟練的人,使用python的整合開發環境pycharm進行學習,可以設定斷點除錯,有助於我這類初學者理解掌握。下面是利用python語言結合opencv的模板匹配 6...