• Support Home
  • Getting Started
    • Connecting Your Camera
    • 3rd Party Software Getting Started Guides
  • Tech Ref Manuals
    • Arena SDK Documentation
    • HTP003S – Helios2+ ToF 3D
    • HLT003S – Helios2 ToF 3D
    • HLS003S – Helios ToF 3D
    • HLF003S – Helios Flex ToF 3D
    • ATX245S – Atlas10 24.5 MP
    • ATX204S – Atlas10 20.4 MP
    • ATX162S – Atlas10 16.2 MP
    • ATX124S – Atlas10 12.3 MP
    • ATX081S – Atlas10 8.1 MP
    • ATX051S – Atlas10 5.0 MP
    • ATL314S – Atlas 31.4 MP
    • ATL196S – Atlas 19.6 MP
    • ATL168S – Atlas 16.8 MP
    • ATL120S – Atlas 12.3 MP
    • ATL089S – Atlas 8.9 MP
    • ATL071S – Atlas 7.1 MP
    • ATL050S – Atlas 5.0 MP
    • ATL028S – Atlas 2.8 MP
    • ATP200S – Atlas IP67 20 MP
    • ATP120S – Atlas IP67 12.3 MP
    • ATP089S -Atlas IP67 8.9 MP
    • ATP071S – Atlas IP67 7.1 MP
    • ATP028S – Atlas IP67 2.8 MP
    • TRI200S – Triton 20.0 MP
    • TRI120S – Triton 12.3 MP
    • TRI122S – Triton 12.2 MP
    • TRI089S – Triton 8.9 MP
    • TRI071S – Triton 7.1 MP
    • TRI064S – Triton 6.3 MP
    • TRI054S – Triton 5.4 MP
    • TRI050S-P/Q – Triton 5.0 MP Polarized
    • TRI050S – Triton 5.0 MP
    • TRI032S – Triton 3.2 MP
    • TRI028S – Triton 2.8 MP
    • TRI023S – Triton 2.3 MP
    • TRI016S – Triton 1.6 MP
    • TRI005S – Triton 0.5 MP
    • TRI004S – Triton 0.4 MP
    • TRI02KA – Triton 2K Line Scan
    • PHX200S – Phoenix 20.0 MP
    • PHX120S – Phoenix 12.3 MP
    • PHX122S – Phoenix 12.2 MP
    • PHX089S – Phoenix 8.9 MP
    • PHX064S – Phoenix 6.3 MP
    • PHX050S-P/Q – Phoenix 5.0 MP Polarized
    • PHX050S – Phoenix 5.0 MP
    • PHX032S – Phoenix 3.2 MP
    • PHX023S – Phoenix 2.3 MP
    • PHX016S – Phoenix 1.6 MP
    • PHX004S – Phoenix 0.4 MP
  • Application Notes
    • Bandwidth Sharing in Multi-Camera Systems
    • Combine Helios 3D Point Cloud with RGB Color
    • I2C Support on LUCID Cameras
    • Using GPIO on LUCID Cameras
    • Using PTP & Scheduled Action Commands
    • Helios2 And Triton Synchronization
    • Product Change Notifications (PCN)
  • Knowledge Base
  • Contact Support
  • Log In
  • Support Home
  • Getting Started
    • Connecting Your Camera
    • 3rd Party Software Getting Started Guides
  • Tech Ref Manuals
    • Arena SDK Documentation
    • HTP003S – Helios2+ ToF 3D
    • HLT003S – Helios2 ToF 3D
    • HLS003S – Helios ToF 3D
    • HLF003S – Helios Flex ToF 3D
    • ATX245S – Atlas10 24.5 MP
    • ATX204S – Atlas10 20.4 MP
    • ATX162S – Atlas10 16.2 MP
    • ATX124S – Atlas10 12.3 MP
    • ATX081S – Atlas10 8.1 MP
    • ATX051S – Atlas10 5.0 MP
    • ATL314S – Atlas 31.4 MP
    • ATL196S – Atlas 19.6 MP
    • ATL168S – Atlas 16.8 MP
    • ATL120S – Atlas 12.3 MP
    • ATL089S – Atlas 8.9 MP
    • ATL071S – Atlas 7.1 MP
    • ATL050S – Atlas 5.0 MP
    • ATL028S – Atlas 2.8 MP
    • ATP200S – Atlas IP67 20 MP
    • ATP120S – Atlas IP67 12.3 MP
    • ATP089S -Atlas IP67 8.9 MP
    • ATP071S – Atlas IP67 7.1 MP
    • ATP028S – Atlas IP67 2.8 MP
    • TRI200S – Triton 20.0 MP
    • TRI120S – Triton 12.3 MP
    • TRI122S – Triton 12.2 MP
    • TRI089S – Triton 8.9 MP
    • TRI071S – Triton 7.1 MP
    • TRI064S – Triton 6.3 MP
    • TRI054S – Triton 5.4 MP
    • TRI050S-P/Q – Triton 5.0 MP Polarized
    • TRI050S – Triton 5.0 MP
    • TRI032S – Triton 3.2 MP
    • TRI028S – Triton 2.8 MP
    • TRI023S – Triton 2.3 MP
    • TRI016S – Triton 1.6 MP
    • TRI005S – Triton 0.5 MP
    • TRI004S – Triton 0.4 MP
    • TRI02KA – Triton 2K Line Scan
    • PHX200S – Phoenix 20.0 MP
    • PHX120S – Phoenix 12.3 MP
    • PHX122S – Phoenix 12.2 MP
    • PHX089S – Phoenix 8.9 MP
    • PHX064S – Phoenix 6.3 MP
    • PHX050S-P/Q – Phoenix 5.0 MP Polarized
    • PHX050S – Phoenix 5.0 MP
    • PHX032S – Phoenix 3.2 MP
    • PHX023S – Phoenix 2.3 MP
    • PHX016S – Phoenix 1.6 MP
    • PHX004S – Phoenix 0.4 MP
  • Application Notes
    • Bandwidth Sharing in Multi-Camera Systems
    • Combine Helios 3D Point Cloud with RGB Color
    • I2C Support on LUCID Cameras
    • Using GPIO on LUCID Cameras
    • Using PTP & Scheduled Action Commands
    • Helios2 And Triton Synchronization
    • Product Change Notifications (PCN)
  • Knowledge Base
  • Contact Support
  • Log In
home/Knowledge Base/Camera Features/Using QOI with LUCID Cameras

Using QOI with LUCID Cameras

220 views 0 March 21, 2025 Updated on April 10, 2025

Quite OK Image Format (QOI) is a lossless image compression method that balances compression ratio and throughput. This article explains how to obtain a compressed image from a camera and how to decompress the image.

Prerequisites

  • Phoenix camera with firmware v1.78 and higher
  • Triton camera with firmware v1.127 and higher
  • Arena SDK v1.0.49.3 and higher

The following cameras do not support QOI:

  • Phoenix: PHX050S-P, PHX050S-Q, PHX050S1-P, PHX050S1-Q, Phoenix Dual Extended-Head cameras
  • Triton: TRI050S-P, TRI050S-Q, TRI050S1-P, TRI050S1-Q, TRI02KA-M, TRI054S-C, TDR054S-C

How to enable QOI compression on your camera

  1. Stop streaming if the camera is streaming images
  2. Set Pixel Format to a QOI pixel format
    • Mono cameras: QOI_Mono
    • Color cameras: QOI_BayerRG8, QOI_Mono8, QOI_RGB8, QOI_BGR8, QOI_YCbCr8
  3. Set Acquisition Frame Rate Link Limit Enable = False.
     

    (This node configures whether the acquisition frame rate is constrained to prevent the device bandwidth from being exceeded.
    This node must be set to False so to enable the frame rate to to be increased past this constraint.)

  4. Set ISP Clock Speed = Fast.

Comparison

Example settings with a TRI032S-M and resulting change in frame rate are shown below.

QOI works best on a controlled scene. The compression ratio and compression speed can vary. Longer compression times result in slower framerates.

Using Arena SDK to grab a QOI-compressed image

C++

Arena::SetNodeValue<<bool>(pDevice->GetNodeMap(), "AcquisitionFrameRateLinkLimitEnable", false);
Arena::SetNodeValue<GenICam::gcstring>(pDevice->GetNodeMap(), "ISPClockSpeed", "Fast");
Arena::SetNodeValue<GenICam::gcstring>(pDevice->GetNodeMap(), "PixelFormat", "QOI_Mono8");
 
pDevice->StartStream();

Arena::ICompressedImage* pCompressedImage = pDevice->GetCompressedImage(2000);

// use compressed image
pDevice->RequeueBuffer(pCompressedImage);

pDevice->StopStream();

See the following code samples, which are available with the Arena SDK or the Arena Python Package:

  • Cpp_Acquisition_CompressedImageHandling
  • Cs_Acquisition_CompressedImageHandling
  • C_Acquisition_CompressedImageHandling
  • py_acquisition_compressed_image_handling.py and py_acquisition_compressed_image_handling.ipynb

Using Arena SDK to decompress a QOI-compressed image:

C++

IImage* pDecompressedImage = Arena::ImageFactory::DecompressImage(pCompressedImage);
 
Arena::ImageFactory::Destroy(pDecompressedImage);

See the following code samples, which are available with the Arena SDK or the Arena Python Package:

  • Cpp_Acquisition_CompressedImageLoading
  • Cs_Acquisition_CompressedImageLoading
  • C_Acquisition_CompressedImageLoading
  • py_acquisition_compressed_image_handling.py and py_acquisition_compressed_image_handling.ipynb

Decompressing a QOI-compressed image

C++

#define QOI_IMPLEMENTATION
#include "qoi.h"
[...]
 
Arena::SetNodeValue<<bool>(pDevice->GetNodeMap(), "AcquisitionFrameRateLinkLimitEnable", false);
Arena::SetNodeValue<GenICam::gcstring>(pDevice->GetNodeMap(), "ISPClockSpeed", "Fast");
Arena::SetNodeValue<GenICam::gcstring>(pDevice->GetNodeMap(), "PixelFormat", "QOI_Mono8");
 
pDevice->StartStream();
 
Arena::ICompressedImage* pCompressedImage = pDevice->GetCompressedImage(2000);
 
qoi_desc desc = { 0 };
void* decompressed_image = qoi_decode(pCompressedImage->GetData(), (int)pCompressedImage->GetSizeFilled(), &desc, 1);
 
QOI_FREE(decompressed_image)
 
pDevice->RequeueBuffer(pCompressedImage);

Arena SDK’s Arena::ImageFactory::DecompressImage decompresses images using the qoi_decode function, which works in the same way as the function shown above.

The following decompression algorithms are used:

  • Color images: https://github.com/phoboslab/qoi
  • Mono images: https://github.com/jstavats/qoi

Using a non-QOI pixel format with a QOI configuration

Using the above configuration with non-QOI pixel formats may lead to dropped frames if the resulting bandwidth is beyond 1 Gbps. The host is notified of these dropped frames with a Frame Dropped event.

Was this helpful?

Yes  No
Related Articles
  • Using Multiple Helios Cameras Simultaneously
  • Shading Correction Control (Atlas10)
  • Save Image on LUCID Camera’s File System
  • Multicast Device Discovery with LUCID Cameras
  • Comparing LUCID’s IMX490 Cameras: TRI054S vs. TDR054S with AltaView
  • Precision Time Protocol (PTP)

Didn't find your answer? Contact Us

  Using Multiple Helios Cameras Simultaneously

© 2024 LUCID Vision Labs Inc.
Looking to purchase our cameras?
Visit the LUCID Webstore at thinklucid.com
LUCID Support & Help
Welcome to LUCID

We use cookies to facilitate online purchases and analyze our traffic. By clicking "Accept", you consent to our use of cookies.

Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}
LUCID Support & Help
Welcome to LUCID

We use cookies to facilitate online purchases and analyze our traffic. By clicking "Accept", you consent to our use of cookies.

Functional Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
Manage options Manage services Manage {vendor_count} vendors Read more about these purposes
View preferences
{title} {title} {title}