2011-10-26 48 views
1

我已經使用nashruddin.com中的源代碼在來自我的網絡攝像機的實時視頻流中檢測到的人臉上繪製了一個矩形。如何從圖像訪問檢測到的臉部像素?

我想將面部或整個矩形更改爲黑色。 我嘗試過使用本頁面的解決方案:http://www.cs.iit.edu/~agam/cs512/lect-notes/opencv-intro/opencv-intro.html#SECTION00053000000000000000

但是我不能讓臉部或矩形變成黑色。

什麼其實我試過了,其中一個例子是這樣的:

//do the capture frame all those 

for(int i = 0 ; i < (faces ? faces->total : 0) ; i++) { 

CvRect *r = (CvRect*)cvGetSeqElem(faces, i);   
cvRectangle(frame, 
       cvPoint(r->x, r->y), 
       cvPoint(r->x + r->width, r->y + r->height), 
       CV_RGB(255, 0, 0), 1, 8, 0); 

int x=r->x; 

int y=r->y; 

int width=r->width; 

int height=r->height; 

for(int i=x; i<=height; i++){ 

for(int j=y; j<=width; j++){ 

//data[i*step+j*channels+0] = 0;//3=yellow; 2=blue; 1=purple; 

((unsigned char *)(frame->imageData + i*frame->widthStep))[j*frame->nChannels + 0]=0;// B 

((unsigned char *)(frame->imageData + i*frame->widthStep))[j*frame->nChannels + 1]=0; // G 

((unsigned char *)(frame->imageData + i*frame->widthStep))[j*frame->nChannels + 2]=0; // R }} 

我想要做的是,我宣佈的寬度和高度,通過使用也被使用在cvRectangle點,這是點r。

但是,輸出尺寸與矩形的外觀大小決不相同。輸出通常是矩形或正方形,顏色是黑色,但與矩形有不同的尺寸和較小的尺寸,它們應該是這樣,而且它們也較小並且不在對齊中。

我不知道爲什麼。

請幫忙。 其目的是用黑色遮蓋臉部,用黑色像素遮蓋臉部。

請幫幫我。 謝謝。

回答

0

首先,你正在重新使用i變量這是一個大問題。改變最上面的for循環,這只是令人困惑。

此外,你最內層的兩個for循環是錯誤的。它們應該是:

for(int i = y; i < y + height; i++){ 
    for(int j = x; j < x + width; j++){ 

請記住,您正在循環播放絕對座標,而寬度和高度是相對項。通常也希望y變量位於外部循環中,因爲它使內存訪問更快(至少在OpenCV中)。