level 2
lankybin
楼主
我把android底层作为opencv的运行环境,将opencv放在安卓源码里重新编译出库文件,然后编写可执行文件的方式运行opencv
我的摄像头通过cap.get(CV_CAP_PROP_FPS获取到摄像头帧数为:30FPS,但是在while里循环cap>>frame会发现每走一次while循环都会消耗66ms左右,也就是15帧。
代码结构如下:
while (1) {
// usleep(20 * 1000);
t3 = (double)cvGetTickCount();
cap >> frame;
t1 = (double)cvGetTickCount();
parseFrame();
t2 = (double)cvGetTickCount(); __android_log_print(ANDROID_LOG_INFO, "opencv", "getFrame: %f ms,\tparseFrame:%f ms,\tTotal Time>> %f ms", (t1 - t3)*1000/(getTickFrequency()),(t2 - t1)*1000/(getTickFrequency()),(t2 - t3)*1000/(getTickFrequency()));
}
parseFrame是对当前这一帧做处理,耗时25-30ms,我发现一次while循环的用时是固定的,如果我在一次while里只执行cap>>frame,那么这一句耗时就是66ms,哪怕我usleep了30ms,cap>>frame就会减少好事,while一次的总耗时依然保持在66ms左右。求大神解释,请教一下如何保持摄像头的30帧处理速度?
2020年06月11日 01点06分
1
我的摄像头通过cap.get(CV_CAP_PROP_FPS获取到摄像头帧数为:30FPS,但是在while里循环cap>>frame会发现每走一次while循环都会消耗66ms左右,也就是15帧。
代码结构如下:
while (1) {
// usleep(20 * 1000);
t3 = (double)cvGetTickCount();
cap >> frame;
t1 = (double)cvGetTickCount();
parseFrame();
t2 = (double)cvGetTickCount(); __android_log_print(ANDROID_LOG_INFO, "opencv", "getFrame: %f ms,\tparseFrame:%f ms,\tTotal Time>> %f ms", (t1 - t3)*1000/(getTickFrequency()),(t2 - t1)*1000/(getTickFrequency()),(t2 - t3)*1000/(getTickFrequency()));
}
parseFrame是对当前这一帧做处理,耗时25-30ms,我发现一次while循环的用时是固定的,如果我在一次while里只执行cap>>frame,那么这一句耗时就是66ms,哪怕我usleep了30ms,cap>>frame就会减少好事,while一次的总耗时依然保持在66ms左右。求大神解释,请教一下如何保持摄像头的30帧处理速度?