实时OpenCV摄像机上的透明图像叠加

时间:2018-02-17 12:20:15

标签: java android opencv overlay

我已经有我的身体检测代码,它工作正常。我希望在检测到身体时,在实时opencv相机上使用透明图像(例如衬衫)覆盖它。顺便说一下,我用haar级联分类器进行检测。

以下是我的人体检测的c ++代码:

nerds_thesis_clartips_OpencvClass.cpp

#include "nerds_thesis_clartips_OpencvClass.h"

JNIEXPORT void JNICALL Java_nerds_thesis_clartips_OpencvClass_humanDetection
  (JNIEnv *, jclass, jlong addrRgba){
    Mat& frame = *(Mat*)addrRgba;

    detectHuman(frame);
    }

  void detectHuman(Mat& frame){
    String human_cascade_name = "/storage/emulated/0/data/haarcascade_upperbody.xml";
    CascadeClassifier human_cascade;

    if(!human_cascade.load( human_cascade_name ) ) { printf("--(!)Error loading\n"); return; };

    std::vector<Rect> humans;
    Mat frame_gray;

    cvtColor( frame, frame_gray, CV_BGR2GRAY );
    equalizeHist( frame_gray, frame_gray);

    //-- Detect Human
    human_cascade.detectMultiScale( frame_gray, humans, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    for (int i=0; i<humans.size(); i++)
        rectangle(frame, Point(humans[i].x, humans[i].y), Point(humans[i].x+humans[i].width, humans[i].y+humans[i].height), Scalar(0,255,0));

   }

以下是我的h档案中的代码:

nerds_thesis_clartips_OpencvClass.h

#include <jni.h>
#include <opencv2/opencv.hpp>
/* Header for class nerds_thesis_clartips_OpencvClass */

using namespace cv;

#ifndef _Included_nerds_thesis_clartips_OpencvClass
#define _Included_nerds_thesis_clartips_OpencvClass
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     nerds_thesis_clartips_OpencvClass
 * Method:    humanDetection
 * Signature: (J)V
 */

 void detectHuman(Mat& frame);

JNIEXPORT void JNICALL Java_nerds_thesis_clartips_OpencvClass_humanDetection
  (JNIEnv *, jclass, jlong);

#ifdef __cplusplus
}
#endif
#endif

我还是这个领域的菜鸟,这将成为我在大学里的最终成绩。

1 个答案:

答案 0 :(得分:0)

为此必须使用alpha弯曲。 要构建透明叠加层,您需要两个图像:

  • 您的原始图片。
  • 包含您想要“覆盖”在第一个上面的内容的图像 使用某种程度的alpha透明度。

以下是透明叠加图像的示例,但它是在python中 https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/

https://pytech-solution.blogspot.in/2017/07/alphablending.html

下面是c ++中aplha弯曲的实现,但为了使叠加图像透明,你必须在上面的第一个链接中看到逻辑。 https://www.learnopencv.com/alpha-blending-using-opencv-cpp-python/