2011-10-26 12 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ループを変更してください。それはちょうど混乱します。

また、最も内側の2つのforループが間違っています。それらは次のようにする必要があります。

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

絶対座標をループしていることに注意してください。幅と高さは相対的な用語です。また、一般的には、y変数を外側のループ上に置くことをお勧めします。これは(少なくともOpenCVでは)メモリアクセスが速くなるためです。