2013-07-21 44 views
0

我一直在使用OpenCV C/C++,目前我正在尝试Android。我正在检测脸部特征。我使用OpenCV示例进行人脸检测,并通过级联检测功能。我想问您的是:OpenCV4Android - 在矩形中捕获图像(面部检测)

1)如何在reactangle可变/设备内存捕捉区域:

在OpenCV的它的工作就像是:

cvSetImageROI(img1, cvRect(10, 15, 150, 250)); 

IplImage *img2 = cvCreateImage(cvGetSize(img1), 
          img1->depth, 
          img1->nChannels); 
cvCopy(img1, img2, NULL); 

在Android中的例子,我有数组与发现面的矩形:

Rect[] facesArray = faces.toArray(); 
for (int i = 0; i < facesArray.length; i++) 
Core.rectangle(mRgba, facesArray[i].tl(), facesArray[i].br(), FACE_RECT_COLOR, 3); 

但我不知道如何保存它,因为我无法在IplImage上工作。你能指导我一些吗?或者给我一些我可以学习的来源?

2)如果有任何的方式来设置的onClick,在其上发现了摄像机视图的区域,这样我就可以点击choosen脸,它写某种变量或将其保存在内存中

回答

0

我认为,你正在寻找mRgba.submat(facesArray[i])

(非常偏颇的个人观点:?!你还在使用IplImages(又称C-API)whaa坏习惯搬过来的C++ API)

+0

呀它可以帮助很多,它允许我将矩形区域写入变量。如果你还可以告诉我显示它的方式,因为当我这样做时:if(facesArray [0]!= null){mChosenFace = mRgba.submat(facesArray [0]);返回mChosenFace; }我的相机视图冻结。那么,我有问题,因为你可以看到,在C++中,我正在使用书,我有参考,现在我不知道写作和显示图像的基本知识。你有什么资源可以学习吗? – F1sher

+1

你不能只说:if(facesArray [0]!= null)。如果没有找到面孔,则不存在facesArray [0],这已经是非法指令了。你必须首先检查facesArray.length – berak