我已经使用 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)来声明宽度和高度。
但是,输出的大小永远不会与矩形的外观相同。输出通常是一个矩形或正方形,颜色为黑色,但与它应该是的矩形不同且尺寸更小,它们也更小且不对齐。
我不知道为什么。
请帮忙。 目的是用黑色覆盖面部,用黑色像素隐藏面部。
请帮帮我。 谢谢。
最佳答案
首先,您要重新使用 i
变量,这是个大问题。更改最顶层的 for
循环,这只会让人感到困惑。
此外,您最里面的两个 for
循环是错误的。它们应该是:
for(int i = y; i < y + height; i++){
for(int j = x; j < x + width; j++){
请记住,您是在绝对坐标上循环,而宽度和高度是相对项。此外,通常您希望 y
变量位于外循环中,因为它可以更快地访问内存(至少对于 OpenCV 而言)。
关于c# - 如何从图像中访问检测到的人脸中的人脸像素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7904375/