android+opencv初尝试
这几天尝试了android下的opencv sdk。
在android下限制就特别多了,比如不能在UI主线程下进行耗时操作,各种java语法也比较严格,android结构比较复杂。
总而言之就是没有python好用,比python严谨也是有好处的,逻辑更简洁,计算更快,编译后代码逻辑不臃肿。
先上效果图(利用摄像头采集视频来实现实时检测)

核心的java代码:
Mat imga = new Mat();
Mat gray1 = new Mat();
mRgba = inputFrame.rgba();
//mRgba = inputFrame.rgba();
mGray = inputFrame.gray();
//Imgproc.cvtColor(mRgba,mGray,Imgproc.COLOR_BayerBG2GRAY);
//Imgproc.blur(mRgba,imga,size(100,100),0,0);
int i=15;
Imgproc.blur(mGray, imga, new Size(1*i, 1*i));
//Mat gray = new Mat();
Mat canny = new Mat();
//SeekBar PP = (SeekBar) findViewById(R.id.);
Imgproc.Canny(imga,canny,100,0);
Mat img_ciles= new Mat();
Imgproc.HoughCircles(imga,img_ciles,Imgproc.HOUGH_GRADIENT,1,100,100,30,50,200);
Mat xx=mRgba;
if (img_ciles.cols() > 0) {
for (int x=0; x < Math.min(img_ciles.cols(), 5); x++ ) {
double circleVec[] = img_ciles.get(0, x);
if (circleVec == null) {
break;
}
Point center = new Point((int) circleVec[0], (int) circleVec[1]);
int radius = (int) circleVec[2];
Imgproc.circle(xx, center, 2, new Scalar(255, 255, 255), 1);
Imgproc.circle(xx, center, radius, new Scalar(255, 0, 0), 5);
//Imgproc.putText(mRgba,"xxx",,center,);
int a=1;
Imgproc.putText(xx,"D"+circleVec[2]/3.3,center,a, 1, new Scalar(0, 255, 0),1,Imgproc.LINE_AA,false);
//Imgproc.putt
}
}
java的opencv和原生的opencv,关键字发生了变化,还有部分方法名也发生了变化
如CV2变成了Imgproc,方法名有些用代号表示,具体使用需要具体查询!

浙公网安备 33010602011771号