Как поместить 3D-модель на вершину достопримечательностей лица, как приложение для фильтра для лица?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как поместить 3D-модель на вершину достопримечательностей лица, как приложение для фильтра для лица?

Сообщение Anonymous »

Я использую две библиотеки: OpenCV для функций компьютерного зрения и OpenSceneGraph для компьютерных графических функций. Потому что основной целью программного обеспечения является дополненная реальность. Основная цель программного обеспечения состоит в том, чтобы создать фильтр для лица, подобный тому, что в Snapchat, и до сих пор я сделал с достопримечательностями лица (часть компьютерного зрения) и загрузку 3D-модели внутри подачи камеры OpenCV с помощью функций OpenSceneGraph Полем Проблема в том, что я попытался разместить трехмерную модель на вершину достопримечательностей лица, но она не работала идеально, потому что координаты модели отличаются от модели достопримечательностей лица OpenCV.
Итак, есть ли способ, где я Может ли отлично поместить модель на вершину достопримечательностей лица Я разделил число на 10 или 20, потому что точки координат, которые поступают от достопримечательностей лица, огромны по сравнению с тем, которые из позиции модели. Обратите внимание, что позиция модели имеет три точки координат: x, y и z, а точки, которые поступают от достопримечательностей лица - только x и y. < /P>

main .cpp < /p>

#include
#include
#include
#include

#include "opencv2/highgui/highgui.hpp"
#include "opencv2/core/core.hpp"
#include "OpenCVFuncs.hpp"

#include "/home/bardawil/Desktop/OSG-OpenCV-ARDemo/include/BackgroundCamera.h"
#include "/home/bardawil/Desktop/OSG-OpenCV-ARDemo/include/VirtualCamera.h"

using namespace cv;
using namespace cv::face;
using namespace std;

// Initialization: -

// ** OSG Stuff **
int screenWidth, screenHeight, textureWidth, textureHeight;
// Create viewer
osgViewer::Viewer viewer;
// Main Camera
osg::ref_ptr camera = viewer.getCamera();
// Background-Camera (OpenCV Feed)
BackgroundCamera bgCamera;
// Load glass Model as Example Scene
osg::ref_ptr glassModel = osgDB::readNodeFile("priestene test.obj");
// Model position initial value
osg::Vec3 modelPosition(0, 100, 10);
// Model scale initial value
osg::Vec3 modelScale(150, 150, 150);

// ** OpenCV Stuff **
// Video Capture initialization (from desktop camera)
cv::VideoCapture cap(0);

Mat gray;

// Load Face Detector
CascadeClassifier faceDetector("/home/bardawil/Desktop/OSG-OpenCV-ARDemo/haarcascade_frontalface_alt2.xml");

// Create an instance of Facemark
Ptr facemark = FacemarkLBF::create();

struct faceParams faceStruct;
// struct eyesLM eyes;

int main( int argc, char** argv )
{
int count = 0;
facemark->loadModel("/home/bardawil/Desktop/OSG-OpenCV-ARDemo/lbfmodel.yaml");

screenWidth = 640;
screenHeight = 480;

textureWidth = 640;
textureHeight = 480;

// OSG STUFF
viewer.setUpViewInWindow(50,50,screenWidth,screenHeight);

// Virtual Camera setup
VirtualCamera* vCamera = new VirtualCamera(camera);

// OpenCV camera
osg::Camera* backgroundCamera = bgCamera.createCamera(textureWidth, textureHeight);

osg::Group* glassesGroup = new osg::Group();
// Position of glass
osg::PositionAttitudeTransform* position = new osg::PositionAttitudeTransform();

glassesGroup->addChild(position);
position->addChild(glassModel);

// Set Position of Model
position->setPosition(modelPosition);

// Set Scale of Model
position->setScale(modelScale);

// Create new group node
osg::ref_ptr group = new osg::Group;
osg::Node* background = backgroundCamera;
osg::Node* foreground = glassesGroup;
background->getOrCreateStateSet()->setRenderBinDetails(1,"RenderBin");
foreground->getOrCreateStateSet()->setRenderBinDetails(2,"RenderBin");
group->addChild(background);
group->addChild(foreground);
background->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
foreground->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::ON);

// Add the groud to the viewer
viewer.setSceneData(group.get());

if(!cap.isOpened())
{
std::cout updatePosition(0, 0, 0, 0, 0, 0);
//osg::notify(osg::WARN)

Подробнее здесь: https://stackoverflow.com/questions/553 ... filter-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»