【问题标题】:OpenCV/Android: Rectangles from Mat I did not use appears on screenOpenCV/Android:屏幕上出现我未使用的 Mat 矩形
【发布时间】:2014-09-10 22:58:42
【问题描述】:

我正在尝试制作自己的人脸检测安卓应用,它基于混合处理和人脸检测教程。它在我的设备上运行超级慢,分辨率为 240x160 时为 2.5 FPS。

我试图找出问题并使其更快,所以我做的其中一件事是以灰度而不是 RGB 显示结果。当我把它改回来时,我忘记删除我在灰度垫(mGr)上绘制矩形的线。

但令我惊讶的是,那些仍然出现在屏幕上(那些是白色的),在 RGB Mat 的红色之后大约有一帧延迟。所以两者都有。这怎么可能?我没有在 mRGB mat 中绘制任何白色矩形:/

这里我用 Java 来称呼它:

public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
    final int viewMode = mViewMode;
    switch (viewMode) {        
       case VIEW_MODE_FEATURES:
        // input frame has RGBA format
        mRgba = inputFrame.rgba();
        mGray = inputFrame.gray();

        myDetect();//native function
        //Imgproc.cvtColor(mGray, mRgba, Imgproc.COLOR_GRAY2RGBA, 4);

        break;
    }

    return mRgba;
}

这就是它在 C++ 部分的样子

    Mat& mGr = *(Mat*) addrGray;
    Mat& mRgb = *(Mat*) addrRgba;

    vector<Rect> highLight; // vector with rectangles to highlight detected items

    detect(mGr, highLight, env, stages);

    //highlight detected items on screen 
    for (unsigned int i = 0; i < highLight.size(); i++) {
        rectangle(mRgb, highLight[i], Scalar(255, 0, 0, 255),THICKNESS);
        //rectangle(mGr, highLight[i], Scalar(255, 0, 0, 255),THICKNESS);
          // if I leave this here uncommented, white rectangle ghost will appear on my screen both with desired red ones...
}

任何人都可以猜到这怎么可能?提前致谢!

【问题讨论】:

  • 确保再次编译您的本机代码。发生这种情况的可能性很小。

标签: android opencv android-ndk face-detection object-detection


【解决方案1】:

你为什么会感到惊讶?如果您仔细查看代码,输入帧是相同的,但您只提供不同的通道,即 inputframe.rgba 返回 4 个通道,而 inputframe.gray 返回同一输入帧的单个通道。它绘制了那个白色矩形,因为在灰色通道中它只能绘制从亮到暗的不同色调的灰色。

但令我惊讶的是,那些仍然出现在屏幕上(那些 是白色的),在来自 RGB 的红色之后大约有一帧延迟 垫子

这是因为在 RGBA 框架中绘制矩形后,在灰度垫中绘制矩形。在您看来,它好像是在一帧之后绘制的。

矩形(mRgb, highLight[i], Scalar(255, 0, 0, 255),THICKNESS);
矩形(mGr, highLight[i], Scalar(255, 0, 0, 255),THICKNESS);

您是否想知道如何检测灰色框架中的这些矩形

detect(mGr, highLight, env, stages);

并在 rgba 框架上绘制检测结果?

矩形(mRgb, highLight[i], Scalar(255, 0, 0, 255),THICKNESS);

原因同上。

【讨论】:

  • 似乎你是对的,我不知道这两个数学实际上引用的是相同的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-21
  • 1970-01-01
  • 1970-01-01
  • 2017-09-24
  • 1970-01-01
相关资源
最近更新 更多