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,方法名有些用代号表示,具体使用需要具体查询!