Zivid C++ API 2.18.0+1b44dbef-1
Mask.h
Go to the documentation of this file.
1/*******************************************************************************
2 * This file is part of the Zivid API
3 *
4 * Copyright 2015-2026 (C) Zivid AS
5 * All rights reserved.
6 *
7 * Zivid Software License, v1.0
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright notice,
13 * this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright notice,
16 * this list of conditions and the following disclaimer in the documentation
17 * and/or other materials provided with the distribution.
18 *
19 * 3. Neither the name of Zivid AS nor the names of its contributors may be used
20 * to endorse or promote products derived from this software without specific
21 * prior written permission.
22 *
23 * 4. This software, with or without modification, must not be used with any
24 * other 3D camera than from Zivid AS.
25 *
26 * 5. Any software provided in binary form under this license must not be
27 * reverse engineered, decompiled, modified and/or disassembled.
28 *
29 * THIS SOFTWARE IS PROVIDED BY ZIVID AS "AS IS" AND ANY EXPRESS OR IMPLIED
30 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
31 * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE
32 * DISCLAIMED. IN NO EVENT SHALL ZIVID AS OR CONTRIBUTORS BE LIABLE FOR ANY
33 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
34 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
35 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
36 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
37 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
39 *
40 * Contact: Zivid Customer Success Team <customersuccess@zivid.com>
41 * Info: http://www.zivid.com
42 ******************************************************************************/
43
44#pragma once
45
46#include "Zivid/Array2D.h"
48#include "Zivid/Resolution.h"
49
50#include <cstdint>
51#include <iosfwd>
52#include <string>
53
54namespace Zivid
55{
62 class Mask : public Array2D<uint8_t>
63 {
64 public:
67
71
77 ZIVID_UTILS_EXPORT Mask(const Resolution &resolution, const uint8_t *beginIt, const uint8_t *endIt);
78
83 template<
84 typename Iterator,
85 typename std::enable_if_t<
86 std::is_convertible_v<typename std::iterator_traits<Iterator>::value_type, uint8_t>,
87 std::nullptr_t> = nullptr>
88 Mask(const Resolution &resolution, Iterator beginIt, Iterator endIt)
89 : Array2D<uint8_t>(resolution, beginIt, endIt)
90 {}
91
95
97 ZIVID_UTILS_EXPORT std::string toString() const;
98
102 {
103 return Array2D<uint8_t>::mutableData();
104 }
105
108 ZIVID_UTILS_EXPORT const uint8_t *data() const
109 {
110 return Array2D<uint8_t>::data();
111 }
112
116 {
117 return Array2D<uint8_t>::mutableBegin();
118 }
119
123 {
124 return Array2D<uint8_t>::mutableEnd();
125 }
126
134 ZIVID_UTILS_EXPORT uint8_t &operator()(size_t idx)
135 {
136#ifdef __clang__
137# if __has_warning("-Wunsafe-buffer-usage")
138# pragma clang diagnostic push
139# pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
140# endif
141#endif
142 return *(data() + idx);
143#ifdef __clang__
144# if __has_warning("-Wunsafe-buffer-usage")
145# pragma clang diagnostic pop
146# endif
147#endif
148 }
149
158 ZIVID_UTILS_EXPORT uint8_t &operator()(size_t i, size_t j)
159 {
160#ifdef __clang__
161# if __has_warning("-Wunsafe-buffer-usage")
162# pragma clang diagnostic push
163# pragma clang diagnostic ignored "-Wunsafe-buffer-usage"
164# endif
165#endif
166 return operator()((width() * i) + j);
167#ifdef __clang__
168# if __has_warning("-Wunsafe-buffer-usage")
169# pragma clang diagnostic pop
170# endif
171#endif
172 }
173
181 ZIVID_UTILS_EXPORT const uint8_t &operator()(size_t idx) const
182 {
184 }
185
194 ZIVID_UTILS_EXPORT const uint8_t &operator()(size_t i, size_t j) const
195 {
196 return Array2D<uint8_t>::operator()(i, j);
197 }
198 };
199
201 ZIVID_UTILS_EXPORT std::ostream &operator<<(std::ostream &stream, const Mask &mask);
202
203} // namespace Zivid
#define ZIVID_UTILS_EXPORT
Definition UtilsExport.h:56
const DataFormat & operator()(size_t idx) const
Constant reference to an element given by a 1D linear index.
Definition Array2D.h:138
const DataFormat * data() const
Pointer to the first data element of the array.
Definition Array2D.h:126
size_t width() const
Definition Array2D.h:100
Array2D()
Definition Array2D.h:94
A mask for filtering point cloud data.
Definition Mask.h:63
ZIVID_UTILS_EXPORT std::string toString() const
Get string representation of the mask.
ZIVID_UTILS_EXPORT uint8_t & operator()(size_t i, size_t j)
Mutable reference to an element given by row and column.
Definition Mask.h:158
ZIVID_UTILS_EXPORT uint8_t * end()
Mutable iterator to the end of the mask.
Definition Mask.h:122
ZIVID_UTILS_EXPORT uint8_t * begin()
Mutable iterator to the beginning of the mask.
Definition Mask.h:115
ZIVID_UTILS_EXPORT Mask(const Resolution &resolution, const uint8_t *beginIt, const uint8_t *endIt)
Create a mask from third-party mask data (e.g., OpenCV Mat)
ZIVID_UTILS_EXPORT const uint8_t & operator()(size_t i, size_t j) const
Const reference to an element given by row and column.
Definition Mask.h:194
ZIVID_UTILS_EXPORT const uint8_t & operator()(size_t idx) const
Const reference to an element given by a 1D linear index.
Definition Mask.h:181
ZIVID_UTILS_EXPORT const uint8_t * data() const
Const pointer to the first data element of the mask.
Definition Mask.h:108
Mask(const Resolution &resolution, Iterator beginIt, Iterator endIt)
Create a mask from iterator range.
Definition Mask.h:88
ZIVID_UTILS_EXPORT Mask()
Create an empty mask.
ZIVID_UTILS_EXPORT Resolution resolution() const
Get the resolution of the mask.
ZIVID_UTILS_EXPORT uint8_t & operator()(size_t idx)
Mutable reference to an element given by a 1D linear index.
Definition Mask.h:134
ZIVID_UTILS_EXPORT Mask(const Resolution &resolution)
Create a nonzero-filled mask with the specified resolution.
ZIVID_UTILS_EXPORT uint8_t * data()
Mutable pointer to the first data element of the mask.
Definition Mask.h:101
Class describing a resolution with a width and a height.
Definition Resolution.h:56
The main Zivid namespace. All Zivid code is found here.
Definition Application.h:85
std::ostream & operator<<(std::ostream &stream, const Array1D< T > &array)
Serialize array information to a stream.
Definition Array1D.h:183