1.研究背景與意義
隨著計算機(jī)視覺和人工智能技術(shù)的不斷發(fā)展,表情識別系統(tǒng)在各個領(lǐng)域中得到了廣泛的應(yīng)用。表情是人類情感的重要表達(dá)方式之一,通過識別和理解人臉表情,計算機(jī)可以更好地與人類進(jìn)行交互,從而提升用戶體驗(yàn)和服務(wù)質(zhì)量?;贠penCV的表情識別系統(tǒng)成為了當(dāng)前研究的熱點(diǎn)之一。
首先,表情識別系統(tǒng)在人機(jī)交互領(lǐng)域具有重要的應(yīng)用價值。人機(jī)交互是計算機(jī)科學(xué)與心理學(xué)交叉的研究領(lǐng)域,通過分析和理解人類的表情,計算機(jī)可以更好地感知用戶的情感狀態(tài),從而提供更加智能化和個性化的服務(wù)。例如,在智能客服系統(tǒng)中,通過識別用戶的表情,系統(tǒng)可以根據(jù)用戶的情感狀態(tài)調(diào)整回答的語氣和方式,提供更加貼心和人性化的服務(wù)。
其次,表情識別系統(tǒng)在心理學(xué)和情感研究領(lǐng)域具有重要的研究價值。情感是人類心理活動的重要組成部分,通過分析和理解人類的表情,可以更好地研究人類的情感變化和心理狀態(tài)。例如,在心理疾病的診斷和治療中,通過分析患者的表情變化,可以更準(zhǔn)確地判斷患者的情感狀態(tài),從而制定更有效的治療方案。
此外,表情識別系統(tǒng)在安全監(jiān)控和人臉識別領(lǐng)域也具有重要的應(yīng)用價值。通過識別人臉表情,可以更好地判斷人類的情感狀態(tài),從而提升安全監(jiān)控系統(tǒng)的準(zhǔn)確性和效率。例如,在公共場所的安全監(jiān)控中,通過識別人臉表情,可以及時發(fā)現(xiàn)異常情況,提前采取相應(yīng)的措施。同時,在人臉識別領(lǐng)域,通過結(jié)合表情識別技術(shù),可以提高人臉識別系統(tǒng)的魯棒性和準(zhǔn)確性,提升系統(tǒng)的實(shí)用性和可靠性。
基于OpenCV的表情識別系統(tǒng)具有以下特點(diǎn)和優(yōu)勢。首先,OpenCV是一個開源的計算機(jī)視覺庫,具有豐富的圖像處理和分析功能,可以方便地進(jìn)行人臉檢測和表情識別。其次,OpenCV支持多種編程語言,如C++、Python等,可以滿足不同開發(fā)者的需求。此外,OpenCV還具有較好的跨平臺性能,可以在不同的操作系統(tǒng)和硬件平臺上運(yùn)行。
綜上所述,基于OpenCV的表情識別系統(tǒng)在人機(jī)交互、心理學(xué)研究、安全監(jiān)控和人臉識別等領(lǐng)域具有廣泛的應(yīng)用價值。通過深入研究和開發(fā)這一系統(tǒng),可以推動計算機(jī)視覺和人工智能技術(shù)的發(fā)展,提升人機(jī)交互的智能化水平,促進(jìn)人類社會的進(jìn)步和發(fā)展。
2.圖片演示



3.視頻演示
Python+OpenCV表情識別系統(tǒng)(源碼和部署教程)_嗶哩嗶哩_bilibili
4.表情識別系統(tǒng)流程
自動表情識別系統(tǒng)包括人臉圖像獲取、人臉檢測、表情圖像預(yù)處理、表情特征提取與分類識別等六部分。構(gòu)建表情識別系統(tǒng)首先獲取包含人臉的圖像。其次檢測出人臉并截取人臉表情圖像,并且對人臉表情圖像進(jìn)行幾何及光照等預(yù)處理。最后根據(jù)預(yù)處理后的表情圖像提取表情特征,并對特征進(jìn)行分類識別。

5.核心代碼講解
5.1 test.py
封裝為類的代碼如下:
class FaceMask:
def __init__(self, predictor_path, mask_path):
self.detector = dlib.get_frontal_face_detector()
self.predictor = dlib.shape_predictor(predictor_path)
self.mask = cv2.imread(mask_path, cv2.IMREAD_UNCHANGED)
def add_alpha_channel(self, img):
b_channel, g_channel, r_channel = cv2.split(img)
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 255
img_new = cv2.merge((b_channel, g_channel, r_channel, alpha_channel))
return img_new
def merge_img(self, jpg_img, png_img, y1, y2, x1, x2):
if jpg_img.shape[2] == 3:
jpg_img = self.add_alpha_channel(jpg_img)
yy1 = 0
yy2 = png_img.shape[0]
xx1 = 0
xx2 = png_img.shape[1]
if x1 < 0:
xx1 = -x1
x1 = 0
if y1 < 0:
yy1 = -y1
y1 = 0
if x2 > jpg_img.shape[1]:
xx2 = png_img.shape[1] - (x2 - jpg_img.shape[1])
x2 = jpg_img.shape[1]
if y2 > jpg_img.shape[0]:
yy2 = png_img.shape[0] - (y2 - jpg_img.shape[0])
y2 = jpg_img.shape[0]
alpha_png = png_img[yy1:yy2, xx1:xx2, 3] / 255.0
alpha_jpg = 1 - alpha_png
for c in range(0, 3):
jpg_img[y1:y2, x1:x2, c] = ((alpha_jpg * jpg_img[y1:y2, x1:x2, c]) + (alpha_png * png_img[yy1:yy2, xx1:xx2, c]))
return jpg_img
def apply_mask(self, image_path):
im_rd = cv2.imread(image_path, cv2.IMREAD_UNCHANGED)
img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
faces = self.detector(img_gray, 0)
if len(faces) != 0:
for i in range(len(faces)):
for k, d in enumerate(faces):
cv2.rectangle(im_rd, (d.left(), d.top()), (d.right(), d.bottom()), (0, 255, 0))
face = im_rd[d.top():d.bottom(), d.left():d.right()]
mask = cv2.resize(self.mask, (face.shape[1], face.shape[0]))
face_width = d.right() - d.left()
shape = self.predictor(im_rd, d)
mouth_width = (shape.part(54).x - shape.part(48).x) / face_width
mouth_higth = (shape.part(66).y - shape.part(62).y) / face_width
for i in range(68):
cv2.circle(im_rd, (shape.part(i).x, shape.part(i).y), 4, (0, 0, 255), -1, 2)
x1 = d.left()
y1 = d.top()
x2 = x1 + face.shape[1]
y2 = y1 + face.shape[0]
res_img = self.merge_img(im_rd, mask, y1, y1 + mask.shape[0], x1, x1 + mask.shape[1])
cv2.imshow('out', res_img)
cv2.waitKey(0)
該程序文件名為test.py,主要功能是將一個透明的png圖像疊加到一個jpg圖像上,并在人臉部分進(jìn)行特效處理。
程序首先導(dǎo)入了需要使用的庫,包括PIL、cv2、dlib和numpy。然后定義了一個函數(shù)add_alpha_channel,用于為jpg圖像添加alpha通道。接著定義了一個函數(shù)merge_img,用于將png透明圖像與jpg圖像疊加在一起。然后讀取了兩個圖像文件,一個是jpg圖像im_rd,一個是png圖像mask。
接下來,程序?qū)pg圖像轉(zhuǎn)換為灰度圖像,并使用人臉檢測器檢測圖像中的人臉,返回人臉的位置信息。如果檢測到人臉,則遍歷每個人臉,用矩形框出人臉,并計算人臉的一些特征參數(shù)。然后根據(jù)人臉的位置信息,將png圖像resize到與人臉大小相同,并將其疊加到j(luò)pg圖像上。最后顯示疊加后的圖像。
整個程序的功能是將一個透明的png圖像疊加到一個jpg圖像上,并在人臉部分進(jìn)行特效處理。
5.2 test2.py
```python
class ImageMerger:
def __init__(self, jpg_img_path, png_img_path):
self.jpg_img_path = jpg_img_path
self.png_img_path = png_img_path
def add_alpha_channel(self, img):
""" 為jpg圖像添加alpha通道 """
b_channel, g_channel, r_channel = cv2.split(img) # 剝離jpg圖像通道
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 255 # 創(chuàng)建Alpha通道
img_new = cv2.merge((b_channel, g_channel, r_channel, alpha_channel)) # 融合通道
return img_new
def merge_img(self, y1, y2, x1, x2):
""" 將png透明圖像與jpg圖像疊加
y1,y2,x1,x2為疊加位置坐標(biāo)值
"""
# 讀取圖像
img_jpg = cv2.imread(self.jpg_img_path, cv2.IMREAD_UNCHANGED)
img_png = cv2.imread(self.png_img_path, cv2.IMREAD_UNCHANGED)
# 判斷jpg圖像是否已經(jīng)為4通道
if img_jpg.shape[2] == 3:
img_jpg = self.add_alpha_channel(img_jpg)
'''
當(dāng)疊加圖像時,可能因?yàn)榀B加位置設(shè)置不當(dāng),導(dǎo)致png圖像的邊界超過背景jpg圖像,而程序報錯
這里設(shè)定一系列疊加位置的限制,可以滿足png圖像超出jpg圖像范圍時,依然可以正常疊加
'''
yy1 = 0
yy2 = img_png.shape[0]
xx1 = 0
xx2 = img_png.shape[1]
if x1 < 0:
xx1 = -x1
x1 = 0
if y1 < 0:
yy1 = - y1
y1 = 0
if x2 > img_jpg.shape[1]:
xx2 = img_png.shape[1] - (x2 - img_jpg.shape[1])
x2 = img_jpg.shape[1]
if y2 > img_jpg.shape[0]:
yy2 = img_png.shape[0] - (y2 - img_jpg.shape[0])
y2 = img_jpg.shape[0]
# 獲取要覆蓋圖像的alpha值,將像素值除以255,使值保持在0-1之間
alpha_png = img_png[yy1:yy2, xx1:xx2, 3] / 255.0
alpha_jpg = 1 - alpha_png
# 開始疊加
for c in range(0, 3):
img_jpg[y1:y2, x1:x2, c] = ((alpha_jpg * img_jpg[y1:y2, x1:x2, c]) + (alpha_png * img_png[yy1:yy2, xx1:xx2, c]))
return img_jpg
這個程序文件名為test2.py,主要實(shí)現(xiàn)了兩個函數(shù):add_alpha_channel和merge_img。
add_alpha_channel函數(shù)用于為jpg圖像添加alpha通道。它首先將jpg圖像的通道分離成藍(lán)色通道、綠色通道和紅色通道,然后創(chuàng)建一個與藍(lán)色通道形狀相同的alpha通道,像素值全部設(shè)置為255。最后將藍(lán)色通道、綠色通道、紅色通道和alpha通道合并成一個新的圖像,并返回。
merge_img函數(shù)用于將png透明圖像與jpg圖像疊加。它首先判斷jpg圖像是否已經(jīng)為4通道,如果不是則調(diào)用add_alpha_channel函數(shù)為其添加alpha通道。然后根據(jù)疊加位置的坐標(biāo)值,設(shè)定一系列疊加位置的限制,以防止png圖像超出jpg圖像范圍導(dǎo)致程序報錯。接著獲取要覆蓋圖像的alpha值,并將其除以255,使值保持在0-1之間。最后進(jìn)行疊加操作,將jpg圖像和png圖像按照alpha值進(jìn)行加權(quán)融合。最后返回疊加后的jpg圖像。
在主程序中,首先定義了圖像路徑,然后使用cv2.imread函數(shù)讀取圖像。接著設(shè)置疊加位置的坐標(biāo)值,調(diào)用merge_img函數(shù)進(jìn)行疊加操作。最后使用cv2.imshow函數(shù)顯示結(jié)果圖像,并使用cv2.waitKey函數(shù)等待按鍵操作。
5.3 ui.py
def add_alpha_channel(img):
""" 為jpg圖像添加alpha通道 """
b_channel, g_channel, r_channel = cv2.split(img) # 剝離jpg圖像通道
alpha_channel = np.ones(b_channel.shape, dtype=b_channel.dtype) * 255 # 創(chuàng)建Alpha通道
img_new = cv2.merge((b_channel, g_channel, r_channel, alpha_channel)) # 融合通道
return img_new
def merge_img(jpg_img, png_img, y1, y2, x1, x2):
""" 將png透明圖像與jpg圖像疊加
y1,y2,x1,x2為疊加位置坐標(biāo)值
"""
# 判斷jpg圖像是否已經(jīng)為4通道
if jpg_img.shape[2] == 3:
jpg_img = add_alpha_channel(jpg_img)
這個程序文件是一個基于PyQt5的表情識別系統(tǒng)。程序的主要功能是通過攝像頭或者選擇視頻文件進(jìn)行表情識別,并在界面上顯示識別結(jié)果。程序使用了OpenCV、dlib和numpy等庫來進(jìn)行圖像處理和人臉識別。程序界面使用了Qt框架來實(shí)現(xiàn)。
程序的主要邏輯是通過調(diào)用攝像頭或者讀取視頻文件的幀圖像,然后使用人臉檢測器檢測圖像中的人臉。對于每個檢測到的人臉,程序會計算嘴巴的張開程度、眉毛的皺起程度等特征,并根據(jù)這些特征判斷表情的類別。根據(jù)表情的類別,程序會在圖像上顯示相應(yīng)的文字,并可以選擇添加特效。
程序的界面由一個主窗口和幾個按鈕組成。點(diǎn)擊選擇視頻按鈕可以選擇要識別的視頻文件,點(diǎn)擊開始識別按鈕可以開始進(jìn)行表情識別,點(diǎn)擊特效切換按鈕可以切換是否添加特效,點(diǎn)擊退出系統(tǒng)按鈕可以退出程序。
程序使用了多線程來實(shí)現(xiàn)視頻的讀取和表情識別,以保證界面的流暢性。
6.系統(tǒng)整體結(jié)構(gòu)
整體功能和構(gòu)架概括:
該工程是一個表情識別系統(tǒng),基于PyQt5實(shí)現(xiàn)。它可以通過攝像頭或者選擇視頻文件進(jìn)行表情識別,并在界面上顯示識別結(jié)果。程序使用了OpenCV、dlib和numpy等庫來進(jìn)行圖像處理和人臉識別。程序界面使用了Qt框架來實(shí)現(xiàn)。
每個文件的功能如下:
| 文件名 | 功能 |
|---|---|
| test.py | 將一個透明的png圖像疊加到一個jpg圖像上,并在人臉部分進(jìn)行特效處理 |
| test2.py | 為jpg圖像添加alpha通道,將png透明圖像與jpg圖像疊加 |
| ui.py | 表情識別系統(tǒng)的主程序,實(shí)現(xiàn)了界面和表情識別的邏輯 |
7.表情特征提取方法
7.1 幾何特征方法
各個表情發(fā)生時具有相對穩(wěn)定的面部器官位置和形狀,可以提取得出幾何特征向量來表示這些信息。這種情況下臉部很大范圍的個體信息將會是干擾信息,影響識別的精度。因此為表情識別提供的簡單實(shí)用的方法是準(zhǔn)確定位面部器官。根據(jù)提取到的面部器官位置和形狀的信息來進(jìn)行分析。主動形狀模型(Active Shape Model,ASM)4方法就提供了用基準(zhǔn)點(diǎn)定位的方法。這種方法提供了以位置變化作為表情特征。
7.2 灰度特征方法
灰度特征方法是根據(jù)整個人臉區(qū)域像素灰度值進(jìn)行特征提取。這種方法可以對整幅人臉圖像或者局部感興趣的區(qū)域進(jìn)行處理。最早Gianluca等[5]將主分量分析(PCA)法應(yīng)用到表情特征提取。主分量分析是模式識別領(lǐng)域常用的分析方法。這種方法通過線性正交變換的方式提取主要特征信息,去除次要信息。Calder等[6]做了詳細(xì)的工作證明了主分量分析應(yīng)用在表情特征提取的有效性。
7.3 運(yùn)動特征方法
基于運(yùn)動的方法就是根據(jù)臉部運(yùn)動規(guī)律提取表情特征的方法。各種不同表情表達(dá)時人臉的一些特定部位會做出相應(yīng)的運(yùn)動,且具有相對穩(wěn)定的運(yùn)動趨勢。比如人表現(xiàn)出高興時,嘴角會上揚(yáng),眼睛微閉等動作。光流法(Optical Flow)是估計出與真實(shí)運(yùn)動接近的微觀瞬時速度場[7]。光流中包含了連續(xù)變化圖像中臉部對象運(yùn)動信息。根據(jù)這些信息確定面部運(yùn)動類別即表情類別。另一種運(yùn)動特征方法是MPEG-418臉部運(yùn)動參數(shù)法FAP。它是預(yù)先定義好臉部的基本動作,通過研究這些與臉部運(yùn)動的相關(guān)性來描述表情。
7.4 形變特征方法
在不同的表情下,人臉的形狀在面部肌肉的作用下發(fā)生變化。這種變化在圖像中可以明顯的表現(xiàn)出來,可以根據(jù)這些外觀的變化表征人臉表情特征。這種方法考慮了臉部主要部分的形狀及紋理變化,所以更具有全面性。通常可以將整體人臉表情圖像或局部圖像進(jìn)行濾波獲得特征向量。Gabor小波由于其提取紋理特征的顯著效果是常用的濾波方法[9]。
8.Adaboost方法概述
人臉檢測首先是在圖像中匹配出有關(guān)于人臉的特征。通常用于人臉檢測的圖片包含了環(huán)境信息,在這種條件下基于像素的特征提取算法無法滿足實(shí)時性的要求。Haar矩形特征[2]對一些像素塊,比如邊緣、線段等簡單圖形結(jié)構(gòu)比較敏感。矩形特征能夠在給定數(shù)據(jù)有限的條件下編碼這些特征區(qū)域的狀態(tài)。這種算法采用了一些矩形結(jié)構(gòu)作為描述特定的臉部信息,所以比基于像素的算法檢測速度快的多。

參考該博客,Adaboost是由Freund和Schapire于1995年提出的。這種方法是Boosting機(jī)器學(xué)習(xí)算法的一種改進(jìn)形式,可以在不獲取任何先驗(yàn)知識的情況下達(dá)到1991年提出的 Boosting 算法效率。這樣就簡化了算法并更容易應(yīng)用到實(shí)際問題中。
對于給定的訓(xùn)練集{ i,5},L ,{p,y}。每個樣本集中的人臉圖像向量表示為x;(i=1,2,L ,M);向量對應(yīng)的類別標(biāo)簽用y,表示,應(yīng)用在人臉檢測中只有是或者不是這兩種結(jié)果,分別用О和1來表示。當(dāng)然這種算法也可應(yīng)用于人臉識別中,其中輸出結(jié)果就可以是多類。假設(shè)n個給定的學(xué)習(xí)樣本中,有a個非人臉即值為0的樣本,b個值為1的樣本。
其中,o= ln(113,),h(x)表示弱分類器的結(jié)果,最終分類結(jié)果是由T個h(x)的權(quán)重決定的。從上面的式子可以看出弱分類器一般只能簡單的進(jìn)行一次的決策。允許的決策形式為當(dāng)特征H的值大于設(shè)定的閾值時判斷為是人臉,否則判定為非人臉。
一般來說,h,(x)使用在訓(xùn)練時能夠利用訓(xùn)練樣本的分布概率W的弱分類器。當(dāng)弱分類器不滿足這一條件時,可以按照分布概率在訓(xùn)練樣本中選擇其中一部分樣本,用來重新采樣的樣本進(jìn)行下一輪的弱分類器訓(xùn)練[5]。
在人臉檢測問題中,背景中的非人臉結(jié)構(gòu)相對較多,采用分級處理的方式可以達(dá)到提高檢測速度的效果。通常在使用AdaBoost算法時,將其組織為級聯(lián)分類器的形式。

9.人臉檢測模塊
人臉檢測模塊需要實(shí)現(xiàn)從獲取的一幀圖像中檢測出人臉。將人臉區(qū)域的檢測、跟蹤、劃分作為該模塊的功能。檢測方法使用了由Paul Viola和 Michael Jones設(shè)計的 Viola-Jones檢測器[32。實(shí)際中,這種方法需要使用事先訓(xùn)練好的人臉檢測器,這里使用了OpenCV提供的針對正面人臉檢測的模型文件haarcascade_frontalface_alt2.xml。當(dāng)然也可以自己訓(xùn)練合適的文件。人臉檢測模塊有如下幾個步驟;
(1)由于彩色圖像檢測的算法復(fù)雜度較高,所以開始前需要通過函數(shù)cvCvtColorO)將彩色圖像轉(zhuǎn)換為灰度圖像,存儲到IpLImage指針類型的圖像矩陣中。
(2)對得到灰度圖像可以進(jìn)行檢測,通過調(diào)用FaceDetection類中的人臉檢測函數(shù),檢測出人臉區(qū)域并儲存人臉區(qū)域的坐標(biāo),這樣就可以得到盡量接近人臉的圖像。將人臉數(shù)返回到整數(shù)類型nFaces,多個人臉時其值將會大于1。
(3)根據(jù)人眼檢測模型對得到的人臉區(qū)域進(jìn)行人眼對準(zhǔn)。然后提出姿態(tài)端正的人臉。人臉分別存儲到定義的CvMat矩陣中??紤]下面將要進(jìn)行大量的數(shù)據(jù)運(yùn)算,所以這里將其轉(zhuǎn)換到矩陣類型。
(4)所得到的人臉圖像需要經(jīng)過光照預(yù)處理。分別進(jìn)行同態(tài)濾波和灰度規(guī)定化處理。其中同態(tài)濾波器組和灰度處理函數(shù)都需要在處理前進(jìn)行初始化。
(5)最后,將檢測到的人臉圖像顯示到程序界面上,這里是以嵌入的方式發(fā)送界面的矩形窗口中。
OpenCV于1999年誕生于Intel研究中心,Willow Garage負(fù)責(zé)提供支持[30]。它名稱本意是開源計算機(jī)視覺。OpenCV是一個開放源代碼的應(yīng)用平臺,提供了集合多種語言與平臺的計算機(jī)視覺庫。它的目的在于構(gòu)建一個簡單實(shí)用的計算機(jī)視覺函數(shù)庫。通過這個函數(shù)庫來幫助開發(fā)人員更方便地實(shí)現(xiàn)復(fù)雜的計算機(jī)視覺相關(guān)應(yīng)用程序。OpenCV適用于多種計算機(jī)操作系統(tǒng),其中包括Windows、Linux以及較為封閉的Mac計算機(jī)系統(tǒng)。它采用了優(yōu)化的C語言代碼編寫,充分利用多核處理器的優(yōu)勢。這樣的設(shè)計是為了滿足實(shí)時性應(yīng)用的要求,使計算及執(zhí)行速度盡量的快。
OpenCV 不僅在計算機(jī)系統(tǒng)平臺上有其良好的兼容性,還提供了Matlab、Python等實(shí)驗(yàn)室語言的接口。這些都極大提高了其可用性。過去許多頂尖的大學(xué)的研究組都有自己的內(nèi)部使用的開放計算機(jī)視覺庫,包括一些大中型的視覺研發(fā)企業(yè)。在Intel性能庫團(tuán)隊的不懈努力下,實(shí)現(xiàn)了對絕大多數(shù)的視覺算法進(jìn)行了代碼實(shí)現(xiàn)。目前OpenCV有大約二百萬的下載量,大約兩萬的核心用戶,在中國、日本、俄羅斯、歐洲和以色列都有龐大的用戶群。其在圖像處理及目標(biāo)識別領(lǐng)域有廣泛的使用。
OpenCV函數(shù)庫主體分為四個模塊。
(1)CV模塊包含基本的圖像處理函數(shù)和高級的計算機(jī)視覺算法[31。主要有運(yùn)動檢測、對象檢測和識別、結(jié)構(gòu)分析等方面。
(2) ML包含了大量的機(jī)器學(xué)習(xí)算法和一些基于統(tǒng)計的分類和聚類工具,常用的有Boosting 算法、Haar分類算法、決策樹算法和K均值聚類方法等。
(3) HighGUI包含有關(guān)圖像和視頻的操作函數(shù)。其中主要有通常的視頻輸入輸出、圖形接口、圖像的讀取和轉(zhuǎn)換格式。
(4) Cxcore包含基本數(shù)據(jù)結(jié)構(gòu)和函數(shù)。其中有矩陣數(shù)據(jù)結(jié)構(gòu)、XML支持函數(shù)、動態(tài)內(nèi)存分配、繪圖函數(shù)等。
OpenCV提供了很多數(shù)字圖像處理使用的基本類型。這些與C語言中的基本數(shù)據(jù)類型有很大的不同。但模型不是很復(fù)雜,應(yīng)用比較方便。下面給出一些常用的數(shù)據(jù)類型。
(1) CvSize類型是用于表示圖像尺寸的結(jié)構(gòu)體,它的數(shù)據(jù)成員包括整數(shù)類型的W和H,分別表示圖像的寬和高。
(2) CvRect類型是CvSize 的派生類型。它的成員包括整數(shù)類型的x,y,w和H。其中,可以看出前兩個數(shù)據(jù)表示圖像區(qū)域的一個坐標(biāo)點(diǎn),后面兩個表示區(qū)域的尺寸,這樣我們就能規(guī)定出圖像的任一區(qū)域。
(3)CvMat矩陣結(jié)構(gòu)。矩陣由高度、寬度、類型、行數(shù)據(jù)長度和一個指向數(shù)據(jù)的指針構(gòu)成。通??梢酝ㄟ^一個指向CvMat 的指針來訪問這些成員。常用函數(shù)cvCreateMat()來創(chuàng)建,使用cvReleaseMat()釋放所占用的空間。
(4) Ipllmage是繼承自CvMat的數(shù)據(jù)結(jié)構(gòu),是Intel圖像處理庫中的成員,定義了一些表述圖像信息的其他成員。其中主要的有圖像的位深度、通道數(shù)等。
基于上面的介紹大致了解了OpenCV這個簡單易用的集多種圖像處理功能的函數(shù)庫。它被廣泛的用于許多應(yīng)用領(lǐng)域的產(chǎn)品中。其中包括醫(yī)學(xué)圖像分析、運(yùn)動物體檢測、自動監(jiān)視和安全系統(tǒng)、質(zhì)量檢測系統(tǒng)等。
10.系統(tǒng)整合

參考博客《Python+OpenCV表情識別系統(tǒng)(源碼和部署教程)》
11.參考文獻(xiàn)
[1]劉春香,李洪祚.實(shí)時圖像增強(qiáng)算法研究[J].中國光學(xué)與應(yīng)用光學(xué).2009,(5).DOI:10.3969/j.issn.2095-1531.2009.05.004.
[2]劉建征.基于肌肉運(yùn)動的人臉表情識別[J].天津大學(xué).2012.
[3]余磊.Gabor小波變換在人臉識別中的應(yīng)用研究[J].重慶大學(xué).2009.DOI:10.7666/d.y1666479.
[4]王宇緯.基于改進(jìn)光流和HMM的人臉表情識別研究[J].天津大學(xué).2009.DOI:10.7666/d.y1677311.
[5]吳曉陽.基于OpenCV的運(yùn)動目標(biāo)檢測與跟蹤[J].浙江大學(xué)信息科學(xué)與工程學(xué)院.2008.
[6]師雪麗.基于Adaboost算法的人臉檢測方法研究[J].南京郵電大學(xué).2007.DOI:10.7666/d.y1411529.
[7]孫延奎著. 小波變換與圖像、圖形處理技術(shù) [M].清華大學(xué)出版社,2012.
[8]陳勝勇, 劉盛等編著. 基于OpenCV的計算機(jī)視覺技術(shù)實(shí)現(xiàn) [M].科學(xué)出版社,2008.
[9]岡薩雷斯. 數(shù)字圖像處理 [M].電子工業(yè)出版社,2007.