2011-10-26 49 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中)。