Open a new project and enter the code. Right click on the project and open properties. Now click Linker and select Input. Type optitrackuuid.lib in to Additional Dependances.
Important notes:
Component Object Model (COM)
It is a binary-interface. It is used to enable inter-process communication and dynamic object creation.
ATL [library/Framework]
The Active Template Library (ATL) is a set of template-based C++ classes that simplify the programming of Component Object Model (COM) objects.
Com provides a method for sharing binary code across different applications and languages.With COM, A component can be created which communicates with programs that are written in any software language. Using ATL, it is possible to add “parts” to the component easily.
Let us assume that a camera is initialized as COM object. By making use of ATL, frame count (an integer type) is defined as a member of this camera. Since the camera is a COM object, there is an interface to access camera and obtain the frame count via a C++ program or a java program alike. And the programs can access and pass these “members” to each other. Thus in COM the Components, Objects, classes and its members remain unaffected by the language used.
For more interesting Explanation:
Sample Code:
//______________________________________________________________________________________
// Marker Detection Demo Program
// Author: Bharath Prabhuswamy
//______________________________________________________________________________________
//______________________________________________________________________________________
#pragma once
#define WIN32_LEAN_AND_MEAN
#define _USE_MATH_DEFINES
#include <conio.h>
#include <objbase.h>
#include <atlbase.h>
#include "optitrack.h"
#import "optitrack.tlb"
int _tmain(int argc, _TCHAR* argv[])
{
printf("** Marker Detection Demo Program --------------------------------------------\n");
printf("** Author: Bharath Prabhuswamy --------------------------------------------\n\n");
//Initialize COM__________________________________________________
CoInitialize(NULL);
//Initialize Optitrack COM Objects________________________________
CComPtr<inpcameracollection> cameraCollection;
CComPtr<inpcamera> camera;
CComPtr<inpcameraframe> frame;
//Create uninitialized object of the class associated CLSID_______
cameraCollection.CoCreateInstance(CLSID_NPCameraCollection);
//Enumerate (Identify) Available Cameras__________________________
cameraCollection->Enum();
long cameraCount = 0;
int frameCounter = 0;
//Determine Available Cameras_____________________________________
cameraCollection->get_Count(&cameraCount);
//Open the camera if any detected_________________________________
if(cameraCount>0)
{
cameraCollection->Item(0, &camera);
{
//Open camera 0 (i.e. first camera), and set various parameters___
cameraCollection->Item(0, &camera);
//Set Greyscale Mode_____________________________________________
camera->SetOption(NP_OPTION_VIDEO_TYPE , (CComVariant) 1 );
//Set to discard every other frame out of 120 frames
//(i.e. 60 Frames/Second)_________________________________________
camera->SetOption(NP_OPTION_FRAME_DECIMATION , (CComVariant) 1 );
//Set User defined Threshold_______________________________________
camera->SetOption(NP_OPTION_THRESHOLD , (CComVariant) 253);
//Set User defined Intensity_______________________________________
camera->SetOption(NP_OPTION_INTENSITY , (CComVariant) 15);
//Set User defined Exposure________________________________________
camera->SetOption(NP_OPTION_EXPOSURE , (CComVariant) 201);
//Set User defined Ranking options_________________________________
camera->SetOption(NP_OPTION_OBJECT_MASS_WEIGHT , (CComVariant) 0);
camera->SetOption(NP_OPTION_OBJECT_RATIO_WEIGHT , (CComVariant) 2);
camera->SetOption(NP_OPTION_PROXIMITY_WEIGHT , (CComVariant) 0);
camera->SetOption(NP_OPTION_STATIC_COUNT_WEIGHT , (CComVariant) 0);
camera->SetOption(NP_OPTION_SCREEN_CENTER_WEIGHT , (CComVariant) 0);
camera->SetOption(NP_OPTION_LAST_OBJECT_TRACKED_WEIGHT , (CComVariant) 10);
camera->Open();
camera->Start();
{
while(!_kbhit())
{
camera->GetFrame(0, &frame);
if(frame!=0)
{
//Increment Frame Counter_____________________________________
frameCounter++;
//Process Every Frame_________________________________________
if((frameCounter%1==0))
{
long Objcount = 0;
long rank;
CComVariant X, Y, Area;
//Obtain Objects from frame of camera________________________
frame->get_Count(&Objcount);
//Get data of all objects____________________________________
for (int i = 0; i < Objcount; i++)
{
CComPtr<inpobject> object;
frame->Item(i,&object);
object->Transform(camera);
object->get_Rank(&rank);
//Store data of object with first rank______________________
if(rank == 1)
{
object->get_X(&X);
object->get_Y(&Y);
object->get_Area(&Area);
}
}
//Print the values of the object_____________________________
printf("X value is =%f/tY value is =%f/tArea is =%f\n\n",X.dblVal, Y.dblVal,
Area.dblVal);
}
frame->Free();
frame.Release();
}
}
}
camera->Stop();
camera->Close();
}
camera.Release();
}
//Clean-up COM Objects____________________________________________
cameraCollection.Release();
//Uninitialize COM________________________________________________
CoUninitialize();
printf("Application Exit.\n");
return 0;
}
Downloads:Download Project folder with Source 2.89Mb
Images:










