我已经有我的身体检测代码,它工作正常。我希望在检测到身体时,在实时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
我还是这个领域的菜鸟,这将成为我在大学里的最终成绩。
答案 0 :(得分:0)
为此必须使用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/