如何提高 OpenCV 实时检测器应用程序的帧率?
How can I increase OpenCV realtime detector app's fps?
我有人脸检测器应用程序,它使用Java的本机cpp行和OpenCV。它正在检测人脸并在它们周围画一个圆圈。 但由于其工作计划,它的fps非常低。
所以我尝试更改JavaCameraView的布局宽度和高度以降低分辨率并提高fps,但它仍然具有相同的fps。然后我尝试将设置分辨率和 fps 行添加到我的 cpp 文件中,但它们不起作用。
这是我更改的 cpp 代码:
#include <jni.h>
#include "opencv2/objdetect.hpp"
#include "opencv2/highgui.hpp"
#include <android/log.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;
using namespace cv;
extern "C" {
void detect(Mat &input);
void JNICALL
Java_com_example_nativeopencvandroidtemplate_MainActivity_adaptiveThresholdFromJNI(JNIEnv *env, jobject instance,
jlong matAddr) {
Mat &input = *(Mat *) matAddr;
detect(input);
}
void detect(Mat &input) {
String face_cascade_name = "/storage/emulated/0/ony.xml";
CascadeClassifier face_cascade;
std::vector<Rect> faces;
Mat frame_gray;
cvtColor( input, frame_gray, COLOR_RGB2GRAY );
equalizeHist(frame_gray, frame_gray);
face_cascade.detectMultiScale(frame_gray, faces, 1.1, 2, 0 | CASCADE_SCALE_IMAGE, Size(30, 30));
for (size_t i = 0; i < faces.size(); i++) {
Point center(faces[i].x + faces[i].width * 0.5, faces[i].y + faces[i].height * 0.5);
ellipse(input, center, Size(faces[i].width * 0.5, faces[i].height * 0.5), 0, 0, 360, Scalar(255, 0, 255), 4, 8,
0);
}
}
}
这是它的原始模板,我将其 cpp 文件更改为检测人脸。
当我尝试添加三个分类器及其行来检测其他事物并绘制另一个圆圈时,应用程序在我的 Android 操作系统上反复停止。这是我关于这个项目的另一个问题。
您的代码不完整,但看起来您在每一帧上都创建了分类器。这是没有效率的。
相关文章:
- 试图在visual studio上用C++创建一个桌面应用程序
- FFmpeg:制作一个应用程序比直接使用ffmepg更好吗
- 在C应用程序中运行C++(带有STL)函数
- 使用VerQueryValue检索应用程序的文件描述
- Qt C++静态thread_local QNetworkAccessManager是线程应用程序的好选择吗
- 使用调试/崩溃报告将应用程序部署到客户端
- C++控制台应用程序阻止退出
- 码头化的C++应用程序是否向后兼容早期的内核版本
- 将应用程序从32位移植到64位时出现问题
- 如何改变c++应用程序的视觉效果
- WM_CTLCOLORSTATIC从未在WIN32应用程序中触发
- 如何在qt中同步应用程序和显示器的刷新率?
- 如何提高 OpenCV 实时检测器应用程序的帧率?
- 当某些应用程序处于全屏模式时,DesktopDuplication API会产生黑帧
- 为什么我的SDL 2应用程序中的帧速率减半,除非我在某个位置移动鼠标
- 如何在DirectShow应用程序中设置IVP8Encoder过滤器的比特率
- 我如何获得和改变OGRE应用程序的帧率?
- 应用程序在读取35-40个摄像头帧后崩溃
- 显示帧从VNC/RFB到一个OpenGL应用程序
- 如何在Windows 8现代应用程序中从视频流中抓取帧?