Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
Tetragramm
GitHub Repository: Tetragramm/opencv
Path: blob/master/modules/gapi/samples/kernel_api_snippets.cpp
16337 views
1
// [filter2d_api]
2
#include <opencv2/gapi.hpp>
3
4
G_TYPED_KERNEL(GFilter2D,
5
<cv::GMat(cv::GMat,int,cv::Mat,cv::Point,double,int,cv::Scalar)>,
6
"org.opencv.imgproc.filters.filter2D")
7
{
8
static cv::GMatDesc // outMeta's return value type
9
outMeta(cv::GMatDesc in , // descriptor of input GMat
10
int ddepth , // depth parameter
11
cv::Mat /* coeffs */, // (unused)
12
cv::Point /* anchor */, // (unused)
13
double /* scale */, // (unused)
14
int /* border */, // (unused)
15
cv::Scalar /* bvalue */ ) // (unused)
16
{
17
return in.withDepth(ddepth);
18
}
19
};
20
// [filter2d_api]
21
22
cv::GMat filter2D(cv::GMat ,
23
int ,
24
cv::Mat ,
25
cv::Point ,
26
double ,
27
int ,
28
cv::Scalar);
29
30
// [filter2d_wrap]
31
cv::GMat filter2D(cv::GMat in,
32
int ddepth,
33
cv::Mat k,
34
cv::Point anchor = cv::Point(-1,-1),
35
double scale = 0.,
36
int border = cv::BORDER_DEFAULT,
37
cv::Scalar bval = cv::Scalar(0))
38
{
39
return GFilter2D::on(in, ddepth, k, anchor, scale, border, bval);
40
}
41
// [filter2d_wrap]
42
43
// [compound]
44
#include <opencv2/gapi/gcompoundkernel.hpp> // GAPI_COMPOUND_KERNEL()
45
46
using PointArray2f = cv::GArray<cv::Point2f>;
47
48
G_TYPED_KERNEL(HarrisCorners,
49
<PointArray2f(cv::GMat,int,double,double,int,double)>,
50
"org.opencv.imgproc.harris_corner")
51
{
52
static cv::GArrayDesc outMeta(const cv::GMatDesc &,
53
int,
54
double,
55
double,
56
int,
57
double)
58
{
59
// No special metadata for arrays in G-API (yet)
60
return cv::empty_array_desc();
61
}
62
};
63
64
// Define Fluid-backend-local kernels which form GoodFeatures
65
G_TYPED_KERNEL(HarrisResponse,
66
<cv::GMat(cv::GMat,double,int,double)>,
67
"org.opencv.fluid.harris_response")
68
{
69
static cv::GMatDesc outMeta(const cv::GMatDesc &in,
70
double,
71
int,
72
double)
73
{
74
return in.withType(CV_32F, 1);
75
}
76
};
77
78
G_TYPED_KERNEL(ArrayNMS,
79
<PointArray2f(cv::GMat,int,double)>,
80
"org.opencv.cpu.nms_array")
81
{
82
static cv::GArrayDesc outMeta(const cv::GMatDesc &,
83
int,
84
double)
85
{
86
return cv::empty_array_desc();
87
}
88
};
89
90
GAPI_COMPOUND_KERNEL(GFluidHarrisCorners, HarrisCorners)
91
{
92
static PointArray2f
93
expand(cv::GMat in,
94
int maxCorners,
95
double quality,
96
double minDist,
97
int blockSize,
98
double k)
99
{
100
cv::GMat response = HarrisResponse::on(in, quality, blockSize, k);
101
return ArrayNMS::on(response, maxCorners, minDist);
102
}
103
};
104
105
// Then implement HarrisResponse as Fluid kernel and NMSresponse
106
// as a generic (OpenCV) kernel
107
// [compound]
108
109
// [filter2d_ocv]
110
#include <opencv2/gapi/cpu/gcpukernel.hpp> // GAPI_OCV_KERNEL()
111
#include <opencv2/imgproc.hpp> // cv::filter2D()
112
113
GAPI_OCV_KERNEL(GCPUFilter2D, GFilter2D)
114
{
115
static void
116
run(const cv::Mat &in, // in - derived from GMat
117
const int ddepth, // opaque (passed as-is)
118
const cv::Mat &k, // opaque (passed as-is)
119
const cv::Point &anchor, // opaque (passed as-is)
120
const double delta, // opaque (passed as-is)
121
const int border, // opaque (passed as-is)
122
const cv::Scalar &, // opaque (passed as-is)
123
cv::Mat &out) // out - derived from GMat (retval)
124
{
125
cv::filter2D(in, out, ddepth, k, anchor, delta, border);
126
}
127
};
128
// [filter2d_ocv]
129
130
int main(int, char *[])
131
{
132
std::cout << "This sample is non-complete. It is used as code snippents in documentation." << std::endl;
133
134
cv::Mat conv_kernel_mat;
135
136
{
137
// [filter2d_on]
138
cv::GMat in;
139
cv::GMat out = GFilter2D::on(/* GMat */ in,
140
/* int */ -1,
141
/* Mat */ conv_kernel_mat,
142
/* Point */ cv::Point(-1,-1),
143
/* double */ 0.,
144
/* int */ cv::BORDER_DEFAULT,
145
/* Scalar */ cv::Scalar(0));
146
// [filter2d_on]
147
}
148
149
{
150
// [filter2d_wrap_call]
151
cv::GMat in;
152
cv::GMat out = filter2D(in, -1, conv_kernel_mat);
153
// [filter2d_wrap_call]
154
}
155
156
return 0;
157
}
158
159