WPILibC++ 2025.1.1
Loading...
Searching...
No Matches
image_u8.h
Go to the documentation of this file.
1/* Copyright (C) 2013-2016, The Regents of The University of Michigan.
2All rights reserved.
3This software was developed in the APRIL Robotics Lab under the
4direction of Edwin Olson, ebolson@umich.edu. This software may be
5available under alternative licensing terms; contact the address above.
6Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met:
81. Redistributions of source code must retain the above copyright notice, this
9 list of conditions and the following disclaimer.
102. Redistributions in binary form must reproduce the above copyright notice,
11 this list of conditions and the following disclaimer in the documentation
12 and/or other materials provided with the distribution.
13THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
14ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
15WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
16DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
17ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
18(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
19LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
20ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
21(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
22SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
23The views and conclusions contained in the software and documentation are those
24of the authors and should not be interpreted as representing official policies,
25either expressed or implied, of the Regents of The University of Michigan.
26*/
27
28#pragma once
29
30#include <stdint.h>
31#include "image_types.h"
32
33#ifdef __cplusplus
34extern "C" {
35#endif
36
39{
40 // When drawing, we compute the squared distance between a given pixel and a filled region.
41 // int idx = squared_distance * scale;
42 // We then index into values[idx] to obtain the color. (If we must index beyond nvalues,
43 // no drawing is performed.)
44 float scale;
45
47 uint8_t *values;
48};
49
50
51// Create or load an image. returns NULL on failure. Uses default
52// stride alignment.
53image_u8_t *image_u8_create_stride(unsigned int width, unsigned int height, unsigned int stride);
54image_u8_t *image_u8_create(unsigned int width, unsigned int height);
55image_u8_t *image_u8_create_alignment(unsigned int width, unsigned int height, unsigned int alignment);
57
59 image_u8_t *image_u8_create_from_pnm_alignment(const char *path, int alignment);
60
62void image_u8_draw_line(image_u8_t *im, float x0, float y0, float x1, float y1, int v, int width);
63void image_u8_draw_circle(image_u8_t *im, float x0, float y0, float r, int v);
64void image_u8_draw_annulus(image_u8_t *im, float x0, float y0, float r0, float r1, int v);
65
66void image_u8_fill_line_max(image_u8_t *im, const image_u8_lut_t *lut, const float *xy0, const float *xy1);
67
70void image_u8_convolve_2D(image_u8_t *im, const uint8_t *k, int ksz);
71void image_u8_gaussian_blur(image_u8_t *im, double sigma, int k);
72
73// 1.5, 2, 3, 4, ... supported
75
77
78// Write a pnm. Returns 0 on success
79// Currently only supports GRAY and RGBA. Does not write out alpha for RGBA
80int image_u8_write_pnm(const image_u8_t *im, const char *path);
81
82// rotate the image by 'rad' radians. (Rotated in the "intuitive
83// sense", i.e., if Y were up. When input values are unavailable, the
84// value 'pad' is inserted instead. The geometric center of the output
85// image corresponds to the geometric center of the input image.
86image_u8_t *image_u8_rotate(const image_u8_t *in, double rad, uint8_t pad);
87
88#ifdef __cplusplus
89}
90#endif
void image_u8_fill_line_max(image_u8_t *im, const image_u8_lut_t *lut, const float *xy0, const float *xy1)
image_u8_t * image_u8_rotate(const image_u8_t *in, double rad, uint8_t pad)
void image_u8_draw_circle(image_u8_t *im, float x0, float y0, float r, int v)
image_u8_t * image_u8_create_from_pnm(const char *path)
void image_u8_draw_annulus(image_u8_t *im, float x0, float y0, float r0, float r1, int v)
void image_u8_destroy(image_u8_t *im)
image_u8_t * image_u8_create_stride(unsigned int width, unsigned int height, unsigned int stride)
image_u8_t * image_u8_create(unsigned int width, unsigned int height)
void image_u8_convolve_2D(image_u8_t *im, const uint8_t *k, int ksz)
void image_u8_darken(image_u8_t *im)
void image_u8_clear(image_u8_t *im)
image_u8_t * image_u8_create_from_f32(image_f32_t *fim)
void image_u8_draw_line(image_u8_t *im, float x0, float y0, float x1, float y1, int v, int width)
image_u8_t * image_u8_create_alignment(unsigned int width, unsigned int height, unsigned int alignment)
void image_u8_gaussian_blur(image_u8_t *im, double sigma, int k)
image_u8_t * image_u8_copy(const image_u8_t *in)
image_u8_t * image_u8_create_from_pnm_alignment(const char *path, int alignment)
int image_u8_write_pnm(const image_u8_t *im, const char *path)
image_u8_t * image_u8_decimate(image_u8_t *im, float factor)
Definition image_types.h:68
Definition image_u8.h:39
int nvalues
Definition image_u8.h:46
float scale
Definition image_u8.h:44
uint8_t * values
Definition image_u8.h:47
Definition image_types.h:38