Version 9.0.0
No Matches


  • Executing the examples via the console, requires to add the location of the libraries to the PATH-Variable, e.g. set PATH=%PATH%;..\..\sdk\x64 , before executing ir_imager_show.exe ..\..\generic.xml .
  • In order to see where the problem in starting an application is, increase the debug level, e.g.:
    IRLogger::setVerbosity(IRLOG_DEBUG, IRLOG_DEBUG);
    at the beginning of your application. This is how a Log File is being generated.
  • Try temporary activation of nodrop option in uvcvideo: $ sudo rmmod uvcvideo; sudo modprobe uvcvideo nodrop=1
    See Installation

If the example applications do not provide a proper thermal image in false color representation, check

  • ... if a standard UVC camera player can display the raw data stream. Please install guvcview and open the appropriate imager device. guvcview is able to display the obtainable frame rate. Activate this option and check whether the frame rate is >> 1.
  • ... whether the USB bandwidth is sufficient. Unplug every other device on the same USB bus. You can list all attached devices with lsusb -t . Ensure that the thermal imager is the only device on a certain bus.
  • ... if calibration files for your camera (compare serial number, field of view and temperature range) are present (path can be set with the xml configuration, default: /usr/share/libirimager/cali ) and whether they are readable with your system account. The serial number is determined automatically, if it is not set in the xmlConfig file. Field of view and temperature range need to be adjusted in this xmlConfig file, too. The calibration files are looked up in dependency of these settings, e.g.,
  • ... if you use Ubuntu 18.04 or newer versions and receive the error "sh: 1: /sbin/route: not found" you've to install net-tools via "sudo apt install net-tools"


        will configure the file names:


  • ... if the Windows application PIConnect can display thermal data with your camera correctly. If not, hardware concerns may be the reason for your problem.

Questions and Answers

Q: Can I make the libirimager work with a C# Console application ?
A: If you place the [STAThread] attribute over your main function it should also work inside a console application

Q: Can I get the image only using the IP address, since I am not allowed to install the software to be able to redirect it to USB
A: If you use the USB redirector you will also have to use their software for emulating the vritual usb port. The DirectSDK can not communicate with the USB redirector directly.
Another solution is to use the TIM41 or TIM8. This both cameras support direct ethernet connection without the use of the USB redirector and Wutillity.

Q: I created a Linux service that runs on a docker container, everything works fine, except sometimes were it logs errors and suddenly stops working. If the container is recreated it starts working again. What is the cause of this behavior and how can it be resolved.
A: This occurence is a plausibility check from the received usb data which is checking the image metadata. This checks the difference between the current and previous frame on the following values: hardware frame counter difference, temperature of camera box difference, temperature of flag difference and temperature of chip difference.
If the differences are too high it will indicate corrupted usb data and the frame will be dropped. By the looks of it, the docker is causing this issue. A suggestion would be, to try the libuvc instead of the video4linux interface by specifying this value in the config file and installing the libuvc library on the docker system. <device_api>4</device_api>

Q: Can I configure the Trigger Snapshot (PIF) even for my uses ?
A: The PIF interface is supported in the exptert API through C++. An example is included in the download file

\irDirectSDK\examples\pif\vs_project\vs13_pif.vcxproj On a snapshot event, the "onthermalFrameEvent" function (IRImagerHandler.cpp) will be called. Here you would need to implement the logic, to create and save an image.
A good example for the logic is the tiff example, how to save an optris tiff file from the temperature data: irDirectSDK\examples\irextras\writeOptrisTiff.cpp

Q:Why does the first frame contain the MAX temperature value ?
A:Due to the initialization phase. The camera calibrates itself internally until the flag is initialized (as long as the flag is set to flaginitialized)
which results in the MAX temperature being shown.

Q:How do I generate an .xml file under windows, like I am generating one under Linux ?
A:There is no functionality that does this. The download includes a generic.xml file, which path has been baked into the software, too. You can simply modify that .xml file to your needs.

Q:Can you output the ADU values with the SDK ?
A:You can output the Rawdata, which also comes with the meta data:

You also can get the correct energy values:

Q: How do I use the ethernet connection with my Camera ?
A: First, download the latest version of the IRImagerDirectSDK ( Ethernet support exists in 8.8 and upwards. Second, in the PIX-Conenct Software, locate the TCP/IP Settings Window and change Device address to [IP address of the Camera] and check the "auto assign port number" box. To actually use the ethernet connection ,instead of the USB connection, (in the config file .xml) <device_api> has to be changed to 5 instead of 0. Additionally the following values need to be set:

Q: Will the Direct SDK work, if C# is used, to connect the camera directly via ethernet.
A: Yes, for using the ethernet connection instead of usb only the config file need to be changed. Everything else stays the same.

Q: Is there some updated version of this SDK as most of the files seem to not be updated for a long time?
A: The Latest release can be found here:
A changelog can be found here:

Q: Is the connection possible using unique IP/ports or daemon needs to be used?
A: For each camera a unique port on the host system is used for receiving the data. The ethernet communication is encapsulated in the library itself and no daemon needs to be used. Only the camera IP-Address, Host-IP-Address and Host-Port needs to be configured before using the PIX-Connect.

Q: How can I record the image as an mp4 file or save it as an jpg/bmp file ?
A: The direct SDK only provides functionality to access the temeprature data from the camera.
Higher functionality such as saving an image or recording an mp4 is not supported and would need to be implemented by yourself. The OpenCV library is a good choice for such a task.

As an alternative to bmp you can save a tiff file by using the IRTiffWriter Class:

This tiff can be loaded by the PIX-Connect for post processing.

Q: How can I display the temperature line and Histogram ?
A: A Histogram can be calculated by using the ImageBuilder function calcHistogram():

example code:
iBuilder.setData(w, h, image);
unsigned int* histogram = new unsigned int[bins];
iBuilder.calcHistogram(histogram, bins, tMin, tMax);

Q: It looks as if the batch file to copy the application file over to the release direcoty is missing "command exiting with code 9009". Hence, when I am trying to build my Visual studio code project I get the following error:
Error: The command "C:\lib\irDirectSDK\examples\directshow\vs_project\../../../copyIRImagerShow.bat C:\lib\irDirectSDK\examples\directshow\vs_project\../../../ x64:VCEnd" exited with code 9009.

How do I resolve this ?

A: This .bat file is used in the internal build process for coping the files to the right place, but not needed for building the example project.

<device_ip_address> The configured IP-Address of the Camera
<local_udp_port> The configured Port number

Q: How do I disable the nodrop option after enabling it ?
A: Navigate to the file location "/etc/modprobe.d/" open up the uvcvideo.conf file with an text editor of your choice and set "nodrop=1" to "nodrop=0".

Q: How can I save the thermal data from the "void onThermalFrame(unsigned short* thermal, unsigned int w, unsigned int h, evo::IRFrameMetadata meta, void* arg)" function ?
A: Saving the thermal data and converting it into a readable temperature can be done as follows:

float t = (float)thermal[i] / 10.f - 100.f;

Q: In what format is the temperature information stored in thermal?
A: Thermal 16bit with an offset of 100 and factor of 10.

Q: I am trying to check the array that is being saved in thermal, by checking a 2-dimensional array. Why is this not working ?
A: The array being produced is one-dimensional, meaning that an attempt to check 2-deimensional array will not work.

Q: Trying to call something like ("std::cout << evo::IRImager::getVersion() << std::endl;" ) makes m program crash. Why is that so ? A: The crash stems from an incompatibility of the compiler. The compiler, which the libirimager is supposed to compile, is the 2013 Version. Anything above that version will crash the program.

Q: I am setting the temperature Range in the setTempRange() call, this causes the temperature to not change and have a stable output, of the same temperature.
A: To properly initialize this call, set the temperature through the config file (generic.xml).

Q: I would like to connect and use two Optris Cameras, Evocortex.irDirectBinding.MultiExample will not work when I connect both of them. Here is the error message I get "ERROR [DirectBridgeClientUSB.cpp:170] @ 0.613219s :Error occurred in starting stream ... aborting. You may need to reconnect the camera." .Why is that ?
A: You need to provide the serial number of the camera, if you use multiple cameras, since the generic.xml provides the serial number 0, by default. (ir_find_serial to display the Camera IDs)

Q: I am on Windows Server Edition 2008(and up) and have trouble accessing the Camera(error ‘-2147221164 (80040154)’:Class Not Registered). Why is that ?
A: On windows we use the DirectShow-Graph to access the camera along with the NullRenderer and SampleGrabber. It seems that this filters have been removed in win server 2008.
Note: A fast fix for this problem would be to copy the qedit.dll from another windows version( (It is against the EULA of Microsoft)). Or use a different Windows version.

Q: Can I use a virtualized System for the SDK ?
A: There have been USB-Bandwitch limitation due to the virtualized USB-Controller. Changing it to support USB 3.0 helps, in that case.

Q: The images from evo_irimager_get_thermal_image will periodically output a blank frame. We are assuming that this is because the shutter is closing to re-baseline temperatures? Is this the correct understanding?
A: This should only happen on startup in the initialization phase, after that the image should freeze on shutter like in pix connect. You can use the evo_irimager_get_thermal_image_metadata and check the “flagState” field of the EvoIRFrameMetadata for the state of the shutter.

0=irFlagOpen, 1=irFlagClose, 2=irFlagOpening,
3=irFlagClosing, 4=irFlagError, 5=irFlagInitializing

Q: In addition to the xml configuration file, we can pass in a .def file to evo_irimager_usb_init. We also have .dat and .prn files that came on the USB drive with the camera. Which of these files are important to pass?
A: Only the xml filepath needs to be passed. The path to the .def file can be also changed in the configuration file itself.
The Cali–{SerialNumber}.xml, Cali-{SerialNumber} -*.dat and Kennlinie-{SerialNumber}-*.prn should be placed into “/usr/share/libirimager/cali” on linux or “appdata%\Imager\Cali” on windows.
Alternatively this files can also be stored in a custom directory. Then the follow in the xml config file has to be changed to the custom directory:


Q: Can Emissivity and Transmissvity be set in the SDK ?
A: Emissivity and transmissvity can be set with both, Easy and Expert, API:

Easy API:

Expert API:

Note: It is possible in the PIX Connect software to set this for each measure area.

Q: My camera is not outputing the desired framerate. How do I fix this ?
A: You will have to change the videoformatindex in the configuration .xml file.

Q: Is there any option to get the voltage information generated by the sensor and a formula to convert them into temperature value?
A: The energy values can be obtain in the Expert C++ API with this function:

As for the formula to convert them into temperature value. We are not allowed to disclose this, as it is an intellectual property of Optris.

Q: Will the "evo_irimager_get_thermal_image" function wait for the next available frame, or should we add a wait function to ensure there is no form of oversampling ?
A: The function waits for the next frame. There can be a timeout, therefore you should check the return value to be equal to 0.

Q: Why do I need to install the libtiff library ? What does the libtiff library do ?
A: We use the libtiff library internally, to create the tiff files. More info about the library can be found here:

Q: Is it possible to evalute an Image seperatelly with a different emmessivity for each ?
A: It is possible:
void onRawFrame(unsigned char* data, int len, IRDevice* dev)
     int myArg = 1;
     _imager->setRadiationParameters(0.5, 1.0);
     _imager->process(data, (void*)&myArg);
     myArg = 2;
     _imager->setRadiationParameters(1.0, 1.0);
     _imager->process(data, (void*)&myArg);

The second argument (myArg) cane be used for the distinction.

The pointer is being passed in the callback function "onThermalFrame", through the last argument "arg":
void onThermalFrame(unsigned short* thermal, unsigned int w, unsigned int h, IRFrameMetadata meta, void*

Q: I can't seem to find any form of GUI/Layout, to use the SDK. Why is that ?
A: GUI/Layout is not provided with the SDK. More information about the skd itself can be foudn here:

Q: Can I switch between mutliple cameras at will ?
A: Switching between cameras can be done by changing the serialnumber in the .xml config file <serial>0</serial>

Q: Is it possible to configure the emissivity of the Camera "on the fly" ?
A: Yes it is, with the functions: "evo_irimager_set_radiation_parameters()" and "evo_irimager_multi_set_radiation_parameters"

Q: How can I change the value for "TempChipFactor" and "TempChipOffset" ?
A: By adding the following to the .xml file:
     <TempChipFactor>1.0</TempChipFactor>      <TempChipOffset>0.0</TempChipOffset> </imager>

Q: How do I know that the calibration file is being read?
A: The connect method will throw an error if it couldn't read the cali files.

Q: Is there a C# method to force a read of the calibration file?
A: Without the calibration files, calculating the temperature is not possible.

Q: Is the calibration run every time we Connect to the camera?
A: No, they will be downloaded only, if they don't exist for the connected camera in the given directory.

Q: Can we have different calibration files in the same calipath? I ask this because we are using two different (based on serial number) cameras?
A: Yes, this is possible. The calibration file names includes the serialnumber of the camera.

Q: How do we enable the built in logging functionality as specified in the Connect parameters ?
A: If a valid path to logFilePath is passed, there should be a logfile in the execution directory (logFilePath + execution start time)

Connected to this computer via USB

xmlConfigPathPath to xml config

formatsDefPathPath to folder containing formants.def (for default path use: "")

logFilePathPath for logfile (for default path use: "")

System.ExceptionThrown on error

public void Connect(string xmlConfigPath, string formatsDefPath = "", string logFilePath = "")

Q: Is the possibility to a have a connection to OpenCV?
A: It is possible to create a cv::Mat from the acquired unsigned short data array. But it is not possible to directly access the camera through the opencv camera api.

Q: Do .Net Wrappers (Core or Standard), for the IRImagerDirect SDK, exist ?
A: A .Net (Standard) Wrapper can be found in our C# example „\irDirectSDK\examples\c_sharp

Q: Is there a function to rotate the image with the libirimager ?
A: No.

Q: Are there properties we need to use in the SDK to enable the USB > Ethernet protocol for our program ?
A: You can use the USB-Server to transmit the usb data over ethernet: On the client computer, which runs the SDK, you need to install the corresponding service. This establishes the ethernet connection to the USB-Server and emulates a virtual usb port on the computer. You don’t need to change anything on the SDK code. The virtual usb port makes it look to the software as if the camera is directly connected to the computer.

Q: How to calibrate the lenses of a camera
A: The easiest way would be to look into the calibration file itself. They are located here

   Windows: appdata%\Imager\Cali
   Linux: /usr/share/libirimager/cali

The lenses are being defined in the section


The lenses should be defined here, along with a <Text>....</Text> for each optic. In the IRImagerDirect xml you need to specify this value in: <optics_text></optics_text>.
This will specify the used lense. Our calibration file does not contain any "optics text", but I can reference the lens by the FOV. So it works.

Q: I am receiving the USB Data but want the picture
A: Running the 'Optris PIX Connect' software on Windows, while having your camera connected, gives you the abilty to put a checkmark next to "Direct Temperature Mode", which will configure your camera      so that you wont be recieving the USB Data but the picture itself.

   Configuration --> Extern Communication

Q: Receiving only half of the frames (GetPaletteImage call and GetThermalImage call)
A: Asking for the image size also waits for the next frame, which will split the framerate into thirds on GetPaletteImage call and the GetThermalImage call.

Q: I get the error "free():invalid pointer", what does it mean and how do I fix it ?
A: "free():invalid pointer" means that the variable points to a location that is not a dynamic memory region. To fix this, delete the Cali Folder and redownload the calibration files

Q: Can I convert RAVI files recorded with PI-Connect with the Direct-SDK to different Formats ?
A: No, RAVI files are only used by PI-Connect. PI-Connect can import *.raw data files recorded with the Direct-SDK, not vice versa.

Q: Can I import data from my Direct-SDK based application to PI-Connect ?
A: Yes, the class IRFileWriter supports a raw data format, that can be read by PI-Connect. The example serializeRaw.cpp shows the usage of this class.

Q: Is there a better function in the DirectSDK to save files more efficiently ?
A: There is no better function in the DirectSDK to save the file more efficiently. An alternative would be a parallel for loop. Another suggestion would be to save the thermal data into a text file, write a second program that takes that data and creates the image in post process.

Q: How do I set the trigger, to record a tiff file ?
A: The trigger has to be programmed in by calling the raiseSnapshotEvent:

Q: I tried to run the examples in debug mode but I am missing msvcp120d.dll and msvcr120d.dll.
A: it is required to install vs2019 for installing the missing debug versions msvcr120d.dll and msvcp120d.dll.

Q: How is calibration handled ?
A: The calibration data is being downloaded automatically to the camera, if an internet connection is available. Incase of no Internet connection, the calibration data has to be put manually into appdata%\Imager\Cali.

Q: Can I deactivate autoflag ?
A: Autoflag can be paused or deactivated. A complete deactivation will cause, with time, the deviation of the Temperature
mininterval: Is the minimum time, that has to pass between two flags.
maxinterval: Is the maximum time, which can pass before the flag process activates.

Q: How do I update my Camera's sampling rate, so that I can downsample to my desired Hz ?
A: You can change the <fps> in the xml file and by setting it to XX Hz it will downsample to it.

Note: Through <fps> you can downsample. The videoformatindex is used to select the already supported resolution and framerates of the cameras.

Q: Is there an implemented method in the library where I can apply the colorpalette to the 16-bit image, which is obtained with the "evo_irimager_get_thermal_image()" function ?
A: This is not possible with the simple API, instead, it is possible with the use of the ImageBuilder from the expert API "ImageBuilder.h":
     evo::ImageBuilder iBuilder();
     iBuilder.setData(w, h, image);
     unsigned char* paletteImage = new unsigned char[iBuilder.getStride() * h * 3];


- Xi 80

Q: Why do I get the error: ERROR [OpSrc.cpp:699] @ 0.421521s : Unknown chip model detected
A: You are using an older SDK version. Upgrade here:
Note: This solution also works with the Xi 400 model

Q: The initialization fails, with the error message: “Main calibration file missing or inaccessible”. How do I fix this ?
A: The missing calibration files can be downloaded with PIX-Connect or using the tool: irDirectSDK\bin\Win32\irDownloadCalibration.exe. Under Linux: "ir_download_calibration" in the terminal.
Note: This solution works with all cameras.

- Xi400 IR

Q: With the Optris Xi400 IR Camera, what forms of output data are possible ?
A: With our library It is possible to receive an array containing the temperature value for each pixel or array of RBG values, which contains
     the color mapped values for each temperature pixel or both simultaneously.
Note: This solution works with all cameras.

Q: The values I get are ADUs. How can I get the temperature values instead ?
A: The conversion of the ADU values is described in the documentation:

- PI 1M

Q: Whatever video format index I put in the configuration file, I don't get the format I want
A: On the PI 1M series it is also required to specify the temperature range for the selected videoformatindex

Q: Is it possible to operate the PI1M with 1kHz ? If yes, how is the performance ?
A: Yes it is possible. The performance depends on how strong your system is.
Note: With every Rawframe-Callback, in 1kHz mode, are 4 frames transferred. This is why Rawframe-Callback delivers only 250Hz

- PI640

Q: Can the Clipped Format Position be changed ?
A: The Clipped Format Position can be changed through the Expert API, with the "setClippedFormatPosition" function:

     Note: You can not create just any Clipped Format Position, it only moves the areas of the respective videoindex (which provide Clipped Format Position through a higher Framerate )

- PI400|450|450i

Q: I have put in my desired temperature range but I am getting an error
A: For the PI450 you can only set specific temperature ranges.
     For the PI450, that would be:
     -20 °C ... 100 °C
     0 °C ... 250 °C
     150 °C ... 900 °C

Q: We are using the libirimager SDK with our PI450. Is it possible to use it with the PI450i instead ?
A: Yes it is.

Q: When I set "enable_high_precision=1" or "enable_high_precision=0" in the .xml file, I always get "1" when I call _irImager.getTemprangeDecimal();
A: The only supported cameras for high precision are the PI450 and the PI450i, PI400 and XI400 do not support high precision.
     For more information about supported cameras please contact sales

Q: Is there a way, on the GrayBW image, to color areas red, where the temperature exceeds a configurable temperature i.e. 38C° ?
A: This functionallity does not exist in the SDK and has to be programmed in by the user.


Q: Do you know any parameter(s) in the ROS driver to set a fixed thermal measurement range ?
A: This can be done by modifying the optris_drivers.launch file: Set paletteScaling to 1 (eManual: user-defined upper and lower limit (fixed values)) and the temperatureMin and temperatureMax accordantly to 0 … 100:

paletteScaling<– scaling method for color conversion, see ImageBuilder.h
temperatureMin<– set minimum temperature for fixed scaling
temperatureMax<– set maximum temperature for fixed scaling

Q: If we connect the thermal camera to a windows 10PC instead of Ubuntu, how do we arrange this balancing setting. (ABOVE)
A: If you use ROS under Windows the procedure should be the same as before (ROS under Ubuntu).




Q: The Labview "" functions properly under Windows with Labview2019 32 bit but not under Labview2020 64 bit. How do I resolve this ?
A: For 64 bit usage, the libirimager.dll has to be swapped with the 64 bit version. This version can be found here:

Q: Does the IRDirectSDK support LabView ?
A: Yes it does. Please download the windows version of our driver and have a look into "irDirectSDK/examples/labview"

Q: How many Cameras can "evo_irimager_multi_usb_init" support ?
A: The only limiting factor would be the cpu usage and USB-Bus bandwidth

Q: When I run the "set temperature range" .vi it outputs an error. The function is in the example but it won't run. What does this function do and what causes the error ?
A: With "set temperature range" you can choose the calibration area, which are being defined in the .xml file


Some Cameras require you to define the videoformatindex for that.

If the desired action was to set the temperature area for the color-image then:

  • You will need to create a new .vi
  • Set the scaling, with "evo_irimager_set_palette_scale" and the value "scale=1", to manually
  • After that, you can set the temperature area for the color-image, with "evo_irimager_set_palette_manual_temp_range"

Q: I am getting an error, regarding the MSVCP120.dll, when I open the example. How can I fix ths ?
A: A fresh installation of "Visual C++ Redistributable Packages" will fix this issue.

Q: I would like to change the resolution of the image. Right now, I am getting an image 382*288 but my camera has the capability for a higher resolution. How do I change this ?
A: This can be configured through the videoformatindex.
List of all the possible resolutions can be found here:
Note: Some cameras require you to adjust the temperature area:


Note: This solution can be applied outside of LabView, too.

Raspberry Pie <Any Version>

Note: Raspberry Pies have a tendency to cause issues, in the form of incompatibility, with the Cameras. This may lead to problems like Framedrops, Corrupted frames etc. Optris advices against the use of Raspberry Pies and instead advocates the use of a Hummingboard.

Q: I am getting the error: "ERROR [OpMetadata.cpp:85] @ 59.563s : Drop frame duo possible data corruption: [number]". How do I fix this ?
A: Enabling nodrop should fix the problem.