请教,jni调用,类型转换。用opencv进行静态人脸检测

想名字中 2015-05-06 02:30:09
想实现基于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/modules/core/src/matrix.cpp, line 698。
已经实现的整个过程是:java层:bitmap—>int数组,C层:int数组—>Mat。现在问题是C层以前我写的函数输入是IplImage*,现在该怎么从Mat—>IplImage,再从IplImage—>Mat?
如果能用代码说明就更好了。
谢谢!
...全文
422 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Vital777 2016-11-05
  • 打赏
  • 举报
回复
楼主,您好 我的问题是:把数组data里边的数据传给CVMat,然后再转换成Mat,因为我最后需要用cv::normalize来进行规范化, 是对Mat进行操作的。百度试了三种: 1. double data[]={1,4,5,6,7,10}; CvMat src=cvMat(6,1,CV_64FC1,data); Mat b = Mat(src,true);//这里src赋给b,网上搜的这个转换方法,有问题。 2. double data[]={1,4,5,6,7,10}; CvMat *src=cvCreateMat(6,1,CV_64FC1);//但是这里就不能把data里边的数据赋给src了。 3. cvarrToMat(data,false,true,0);///这个函数是怎么用的呀? cvarrToMat(const CvArr* arr, bool copyData=false,bool allowND=true, int coiMode=0);//原型。 希望您看到可以回复一下,谢谢。百度了好多都没有解决问题。
  • 打赏
  • 举报
回复
楼主,您好!我正在学习基于android的人脸识别,请问您可以把源码发给我来参考学习吗?我的邮箱是913571468@qq.com
想名字中 2016-01-09
  • 打赏
  • 举报
回复
引用 4 楼 faithallllll 的回复:
求问楼主是怎么解决的呢?怎么从Mat—>IplImage,再从IplImage—>Mat?试了网上一些方法都不行啊。。
抱歉才看到。 //java到C //原始图像数据 Mat imgData(h, w, CV_8UC4, (unsigned char*) cbuf); Mat bgr; //转换成BGR格式,与C层对应 cvtColor(imgData, bgr, CV_BGRA2BGR); //C到java //与Java层对应 Mat bgr1 = Mat(pInputImg); Mat rgba; //java层的显示格式 cvtColor(bgr1, rgba, CV_BGR2BGRA); uchar* ptr = imgData.ptr(0); uchar* data = rgba.ptr(0); for (int i = 0; i < w * h; i++) { ptr[4 * i + 0] = data[4 * i + 0]; ptr[4 * i + 1] = data[4 * i + 1]; ptr[4 * i + 2] = data[4 * i + 2]; }
想名字中 2016-01-08
  • 打赏
  • 举报
回复
引用 3 楼 jinzengh6 的回复:
bitmap转变成int数组,必须转变成四通道的吗?
应该是的
persimmonunderhill 2015-12-20
  • 打赏
  • 举报
回复
求问楼主是怎么解决的呢?怎么从Mat—>IplImage,再从IplImage—>Mat?试了网上一些方法都不行啊。。
未眠的Captain 2015-08-24
  • 打赏
  • 举报
回复
bitmap转变成int数组,必须转变成四通道的吗?
想名字中 2015-05-06
  • 打赏
  • 举报
回复
已解决 请忽略

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧