Прозрачное наложение изображения на камеру OpenCV в реальном времени

У меня уже есть свои коды для обнаружения тела, и они отлично работают. Я хочу закончить его с помощью прозрачного изображения (например, рубашки), накладываемого на камеру opencv в реальном времени при обнаружении тела. Кстати, для обнаружения я использовал каскадный классификатор haar.

Вот мои коды С++ для обнаружения человеческого тела:

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

Я все еще новичок в этой области, и это будет моим последним результатом в колледже.


person Abegail    schedule 17.02.2018    source источник
comment
Вероятно, вы можете изменить этот код в соответствии со своими потребностями.   -  person karlphillip    schedule 08.03.2018


Ответы (1)


Вы должны использовать альфа-изгиб для этой цели. Для создания прозрачного наложения вам понадобятся два изображения:

  • Ваше исходное изображение.
  • Изображение, содержащее то, что вы хотите «наложить» поверх первого, используя некоторый уровень альфа-прозрачности.

Вот пример прозрачного оверлейного изображения, но оно на Python
https://www.pyimagesearch.com/2016/03/07/transparent-overlays-with-opencv/

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

Ниже приведена реализация сгибания aplha на С++, но чтобы сделать накладываемое изображение прозрачным, вы должны увидеть логику в первой ссылке выше. https://www.learnopencv.com/alpha-blending-using-opencv-cpp-python/

person krishank Tripathi    schedule 17.02.2018
comment
Дело в том, что изображение не накладывается на изображение. Я хочу наложить прозрачное наложение на камеру opencv в реальном времени, похожую на дополненную реальность. - person Abegail; 17.02.2018
comment
Можете ли вы еще помочь мне с этим? мне очень нужно :( - person Abegail; 18.02.2018
comment
хорошо, я не проделал такой глубокой работы в этом поле, но здесь ссылка, которую вы можете найти, использует полный stackoverflow.com/questions/14540210/ - person krishank Tripathi; 19.02.2018
comment
для дополненной реальности см. это bitesofcode.wordpress.com/2017/09/12/ - person krishank Tripathi; 19.02.2018