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

 

posted @ 2019-12-31 10:13  sunny开始学坏  阅读(508)  评论(0编辑  收藏  举报