YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
ImageDraw.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
7#ifndef YARP_SIG_IMAGEDRAW_H
8#define YARP_SIG_IMAGEDRAW_H
9
10#include <cmath>
11
12#include <yarp/sig/Image.h>
13
14
15namespace yarp::sig::draw {
16
17template <class T>
18void addSegment(ImageOf<T>& dest, const T& pix, int x, int y, int dx, int dy)
19{
20 const double vx = double(dx - x);
21 const double vy = double(dy - y);
22 // can't use fmax - not portable --paulfitz
23 double vbigger = fabs((fabs(vy) > fabs(vx)) ? vy : vx);
24 const int steps = int(2 * vbigger);
25 const double r = 1.0 / steps;
26 for (int i = 0; i <= steps; i++) {
27 dest.safePixel(int(x + vx * i * r), int(y + vy * i * r)) = pix;
28 }
29}
30
31template <class T>
32void addCircle(ImageOf<T>& dest, const T& pix,
33 int i, int j, int r) {
34 float d, r2 = (float)(r*r);
35 for (int ii=i-r; ii<=i+r; ii++) {
36 for (int jj=j-r; jj<=j+r; jj++) {
37 d = float((ii-i)*(ii-i)+(jj-j)*(jj-j));
38 if (d<=r2) {
39 dest.safePixel(ii,jj) = pix;
40 }
41 }
42 }
43}
44
45template <class T>
46void addCrossHair(ImageOf<T>& dest, const T& pix,
47 int i, int j, int r) {
48 for (int ii=i-r; ii<=i+r; ii++) {
49 for (int jj=j-r; jj<=j+r; jj++) {
50 if (ii==i||jj==j) {
51 dest.safePixel(ii,jj) = pix;
52 }
53 }
54 }
55}
56
57template <class T>
58void addCircleOutline(ImageOf<T>& dest, const T& pix,
59 int i, int j, int r) {
60 float d, r2 = float(r*r), r2l = float((r-1.1)*(r-1.1));
61 for (int ii=i-r; ii<=i+r; ii++) {
62 for (int jj=j-r; jj<=j+r; jj++) {
63 d = float((ii-i)*(ii-i)+(jj-j)*(jj-j));
64 if (d<=r2 && d>=r2l) {
65 dest.safePixel(ii,jj) = pix;
66 }
67 }
68 }
69}
70
71template <class T>
72void addOvalOutline(ImageOf<T>& dest, const T& pix,
73 int i, int j, int h2, int w2) {
74 float x, y;
75 for (float th=0; th<2.0*3.14159; th+=0.01) {
76 x = j+w2*cos(th);
77 y = i+h2*sin(th);
78 dest.safePixel((int)y,(int)x) = pix;
79 }
80}
81
82
83template <class T>
84void addRectangleOutline(ImageOf<T>& dest, const T& pix,
85 int i, int j, int w, int h) {
86 for (int ii=i-w; ii<=i+w; ii++) {
87 dest.safePixel(ii,j-h) = pix;
88 dest.safePixel(ii,j-h+1) = pix;
89 dest.safePixel(ii,j+h) = pix;
90 dest.safePixel(ii,j+h-1) = pix;
91 }
92 for (int jj=j-h; jj<=j+h; jj++) {
93 dest.safePixel(i-w,jj) = pix;
94 dest.safePixel(i-w+1,jj) = pix;
95 dest.safePixel(i+w,jj) = pix;
96 dest.safePixel(i+w-1,jj) = pix;
97 }
98}
99
103template <class T>
104void addRectangle(ImageOf<T>& dest, const T& pix,
105 int i, int j, int w, int h) {
106 for (int ii=i-w; ii<=i+w; ii++) {
107 for (int jj=j-h; jj<=j+h; jj++) {
108 dest.safePixel(ii,jj) = pix;
109 }
110 }
111}
112
113template <class T>
115 const T& thetalo, const T& thetahi,
116 const T& pix0, const T& pix1) {
117 int h = src.height();
118 int w = src.width();
119 for (int i=0; i<h; i++) {
120 for (int j=0; j<w; j++) {
121 if (src(i,j)>=thetalo && src(i,j)<=thetahi) {
122 dest(i,j) = pix1;
123 } else {
124 dest(i,j) = pix0;
125 }
126 }
127 }
128 return 0;
129}
130
131template <class T>
132void setImagePixels(ImageOf<T>& src, const T& pix) {
133 int h = src.height();
134 int w = src.width();
135 for (int i=0; i<h; i++) {
136 for (int j=0; j<w; j++) {
137 src(i,j) = pix;
138 }
139 }
140}
141
142#ifndef IMGFOR
143#define IMGFOR(img,i,j) for (size_t i=0; i<(img).width(); i++) for (size_t j=0; j<(img).height(); j++)
144#endif
145
146} // namespace yarp::sig::draw
147
148#endif // YARP_SIG_IMAGEDRAW_H
Typed image class.
Definition Image.h:605
T & safePixel(size_t x, size_t y)
Definition Image.h:637
size_t width() const
Gets width of image in pixels.
Definition Image.h:171
size_t height() const
Gets height of image in pixels.
Definition Image.h:177
void addOvalOutline(ImageOf< T > &dest, const T &pix, int i, int j, int h2, int w2)
Definition ImageDraw.h:72
void addRectangleOutline(ImageOf< T > &dest, const T &pix, int i, int j, int w, int h)
Definition ImageDraw.h:84
void addCrossHair(ImageOf< T > &dest, const T &pix, int i, int j, int r)
Definition ImageDraw.h:46
int applyThreshold(ImageOf< T > &src, ImageOf< T > &dest, const T &thetalo, const T &thetahi, const T &pix0, const T &pix1)
Definition ImageDraw.h:114
void addSegment(ImageOf< T > &dest, const T &pix, int x, int y, int dx, int dy)
Definition ImageDraw.h:18
void addCircle(ImageOf< T > &dest, const T &pix, int i, int j, int r)
Definition ImageDraw.h:32
void addRectangle(ImageOf< T > &dest, const T &pix, int i, int j, int w, int h)
warning : i, j is x, y center of rectangle
Definition ImageDraw.h:104
void setImagePixels(ImageOf< T > &src, const T &pix)
Definition ImageDraw.h:132
void addCircleOutline(ImageOf< T > &dest, const T &pix, int i, int j, int r)
Definition ImageDraw.h:58