从onCameraFrame,OpenCV,AndroidJava调用HoughCircles()方法时,帧速率会变慢

从onCameraFrame,OpenCV,AndroidJava调用HoughCircles()方法时,帧速率会变慢,第1张

概述在android中使用openCVJava方法检测图像中的圆形对象时帧速率极慢Imgproc.HoughCircles(mGray,circles,Imgproc.CV_HOUGH_GRADIENT,1,50);当我删除此方法时,它运行速度很快,但在此回调中添加此方法后publicMatonCameraFrame(finalCvCameraViewFrameinputFrame){

在android中使用openCV Java方法检测图像中的圆形对象时帧速率极慢

 imgproc.HoughCircles(mGray, circles, imgproc.CV_HOUGH_GRADIENT, 1, 50);

当我删除此方法时,它运行速度很快,但在此回调中添加此方法后

  public Mat onCameraFrame(final CvCameraviewFrame inputFrame) {

帧速率减慢到每秒1到2帧,我不明白为什么它变得如此慢,我尝试将此方法放在一个单独的线程中,它没有帮助,唯一有效的是使用计数器和和每10帧运行一次方法的if语句.

在OpenCV示例中有一个名为面部检测的示例项目,它既有本机C版本又有Java相机版本,并且它们都变化很快,当我使用类似代码时,我怎么可能从OpenCV获得这种缓慢的便秘行为?

我在这里做错了吗?在openCV示例的面部检测项目中,它们采用每一帧,并且它们不会启动单独的线程.如何修复此问题并使我的代码像OpenCV中的示例项目一样快速运行?

在一个不同的项目中我也有同样的帧速率慢的问题,在这个练习项目中我没有使用openCV,它只是androID Camera类,因为我从onPrevIEwFrame(byte []中获取图像数据,相机摄像头)方法和做一些光处理,如将YUV格式从字节数组转换为位图,并将其放入与摄像机视图相同的屏幕上的另一个视图,结果是慢帧速率变化.

编辑:在一些额外的实验中,我将imgproc.HoughCircles()方法添加到OpenCV面部检测示例项目中.将此方法放在java检测器的onCameraFrame方法中.

结果与我的项目相同,变得缓慢.所以HoughCircles方法可能比面部检测方法CascadeClassifIEr.detectMultiScale()需要更多的处理能力,但是这并没有解释我在youTube上观看其他圈子检测项目的事实,并且在他们的视频中帧速率没有减慢.这就是为什么我认为我正在做的事情有问题.

这是我正在使用的代码示例

public class CircleActivity extends Activity implements CvCameraviewListener2 {Mat                    mRgba;Mat                    mGray;file                   mCascadefile;CascadeClassifIEr      mJavaDetector;CameraBrIDgeVIEwBase   mOpenCvCameraview;linearLayout linearLayoutOne;ImageVIEw imageVIEwOne;int counter = 0;private BaseLoaderCallback mloaderCallback = new BaseLoaderCallback(this) {    @OverrIDe    public voID onManagerConnected(int status) {        switch (status) {            case LoaderCallbackInterface.SUCCESS:            {                Log.i("OPENCV", "OpenCV loaded successfully");                mOpenCvCameraview.enableVIEw();            } break;            default:            {                super.onManagerConnected(status);            } break;        }    }};    /** Called when the activity is first created. */    @OverrIDe    public voID onCreate(Bundle savedInstanceState) {        if (!OpenCVLoader.initDeBUG()) {            // Handle initialization error        }        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_coffee);        getwindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);        mOpenCvCameraview = (CameraBrIDgeVIEwBase) findVIEwByID(R.ID.fd_activity_surface_vIEw);        mOpenCvCameraview.setCvCameraviewListener(this);    }    @OverrIDe    public voID onPause()    {        super.onPause();        if (mOpenCvCameraview != null)            mOpenCvCameraview.disableVIEw();    }    @OverrIDe    public voID onResume()    {        super.onResume();        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mloaderCallback);    }    public voID onDestroy() {        super.onDestroy();        mOpenCvCameraview.disableVIEw();    }    public voID onCameraviewStarted(int wIDth, int height) {        mGray = new Mat();        mRgba = new Mat();    }    public voID onCameraviewStopped() {        mGray.release();        mRgba.release();    }    public Mat onCameraFrame(final CvCameraviewFrame inputFrame) {                mRgba = inputFrame.rgba();                mGray = inputFrame.gray();          if(counter == 9) {              MatOfRect circles = new MatOfRect();                imgproc.HoughCircles(mGray, circles, imgproc.CV_HOUGH_GRADIENT, 1, 50);                // returns number of circular objects found                Log.e("circle check", "circles.cols() " +  circles.cols());           }     counteradder();     return mRgba;    } // end oncamera frame   public voID counteradder() {         if (counter > 10) {            counter = 0;        }        counter++;    } }

解决方法:

降低相机框架的分辨率可能会有所帮助

mOpenCvCameraview.setMaxFrameSize(640, 480);
总结

以上是内存溢出为你收集整理的从onCameraFrame,OpenCV,Android / Java调用HoughCircles()方法时,帧速率会变慢全部内容,希望文章能够帮你解决从onCameraFrame,OpenCV,Android / Java调用HoughCircles()方法时,帧速率会变慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1107102.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存