请教,jni调用,类型转换.用opencv进行静态人脸检测
发布网友
发布时间:2022-05-02 23:43
我来回答
共1个回答
热心网友
时间:2022-06-28 11:26
想实现基于android的人脸检测,初步想法是结合颜色信息和opencv的haar特征。
现在面临的问题是java层到C层的类型转换问题。具体描述如下:
在java层读入相册中的图片,存成数组,在c中将图像数据转换成mat(Mat imgData(h, w, CV_8UC4, (unsigned char*) cbuf);),利用cvtColor转换成bgr格式,再转换成YcbCr格式(仍然是Mat类型)。
可是后面用到的cvAnd、cvErode、cvDilate、cvFindContours等函数的参数都是CvArr*(初学android,我先用C写了人脸检测的函数,当时输入的图像直接是IplImage*,不需要类型转换)。
我试过强制转换(如:IplImage presult=IplImage(Mresult);),可是最后会报错:OpenCV Error: Bad argument (Unknown array type) in cv::Mat cv::cvarrToMat(const CvArr*, bool, bool, int), file /hdd2/buildbot/slaves/slave_ardbeg1/50-SDK/opencv/moles/core/src/matrix.cpp, line 698。
已经实现的整个过程是:java层:bitmap—>int数组,C层:int数组—>Mat。现在问题是C层以前我写的函数输入是IplImage*,现在该怎么从Mat—>IplImage,再从IplImage—>Mat?
如果能用代码说明就更好了。