Skip to content
This repository was archived by the owner on Oct 18, 2023. It is now read-only.

Commit c3d8862

Browse files
Merge pull request justadudewhohacks#57 from grassias/SuperpixelLSC
Superpixel lsc
2 parents a8f9cf2 + dcd1c7a commit c3d8862

File tree

6 files changed

+209
-0
lines changed

6 files changed

+209
-0
lines changed

binding.gyp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
"cc/modules/imgproc/Moments.cc",
4343
"cc/modules/ximgproc/ximgproc.cc",
4444
"cc/modules/ximgproc/SuperpixelSEEDS.cc",
45+
"cc/modules/ximgproc/SuperpixelSLIC.cc",
46+
"cc/modules/ximgproc/SuperpixelLSC.cc",
4547
"cc/modules/objdetect/objdetect.cc",
4648
"cc/modules/objdetect/CascadeClassifier.cc",
4749
"cc/modules/objdetect/HOGDescriptor.cc",

cc/modules/ximgproc/SuperpixelLSC.cc

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#ifdef HAVE_XIMGPROC
2+
3+
#if OPENCV_MINOR_VERSION > 0
4+
5+
#include "SuperpixelLSC.h"
6+
7+
Nan::Persistent<v8::FunctionTemplate> SuperpixelLSC::constructor;
8+
9+
NAN_MODULE_INIT(SuperpixelLSC::Init) {
10+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(SuperpixelLSC::New);
11+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
12+
constructor.Reset(ctor);
13+
instanceTemplate->SetInternalFieldCount(1);
14+
ctor->SetClassName(Nan::New("SuperpixelLSC").ToLocalChecked());
15+
16+
Nan::SetAccessor(instanceTemplate, Nan::New("img").ToLocalChecked(), SuperpixelLSC::GetImg);
17+
Nan::SetAccessor(instanceTemplate, Nan::New("labels").ToLocalChecked(), SuperpixelLSC::GetLabels);
18+
Nan::SetAccessor(instanceTemplate, Nan::New("labelContourMask").ToLocalChecked(), SuperpixelLSC::GetLabelContourMask);
19+
Nan::SetAccessor(instanceTemplate, Nan::New("regionSize").ToLocalChecked(), SuperpixelLSC::GetRegionSize);
20+
Nan::SetAccessor(instanceTemplate, Nan::New("ratio").ToLocalChecked(), SuperpixelLSC::GetRatio);
21+
Nan::SetAccessor(instanceTemplate, Nan::New("numCalculatedSuperpixels").ToLocalChecked(), SuperpixelLSC::GetNumCalculatedSuperpixels);
22+
23+
Nan::SetPrototypeMethod(ctor, "iterate", SuperpixelLSC::Iterate);
24+
25+
target->Set(Nan::New("SuperpixelLSC").ToLocalChecked(), ctor->GetFunction());
26+
};
27+
28+
NAN_METHOD(SuperpixelLSC::New) {
29+
FF_METHOD_CONTEXT("SuperpixelLSC::New");
30+
if (!info.IsConstructCall()) {
31+
FF_THROW("expected new key word");
32+
}
33+
SuperpixelLSC* self = new SuperpixelLSC();
34+
35+
FF_ARG_INSTANCE(0, self->img, Mat::constructor, FF_UNWRAP_MAT_AND_GET);
36+
FF_ARG_INT_IFDEF(1, self->regionSize, 10);
37+
FF_ARG_INT_IFDEF(2, self->ratio, 0.075);
38+
39+
self->Wrap(info.Holder());
40+
self->superpixelLsc = cv::ximgproc::createSuperpixelLSC(
41+
self->img,
42+
self->regionSize,
43+
self->ratio
44+
);
45+
info.GetReturnValue().Set(info.Holder());
46+
}
47+
48+
NAN_METHOD(SuperpixelLSC::Iterate) {
49+
FF_METHOD_CONTEXT("SuperpixelLSC::Iterate");
50+
51+
FF_ARG_UINT_IFDEF(0, uint iterations, 10);
52+
53+
SuperpixelLSC* self = FF_UNWRAP(info.This(), SuperpixelLSC);
54+
self->superpixelLsc->iterate((int)iterations);
55+
self->superpixelLsc->getLabels(self->labels);
56+
self->numCalculatedSuperpixels = self->superpixelLsc->getNumberOfSuperpixels();
57+
self->superpixelLsc->getLabelContourMask(self->labelContourMask, false);
58+
}
59+
60+
#endif
61+
62+
#endif // HAVE_XIMGPROC

cc/modules/ximgproc/SuperpixelLSC.h

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#include <opencv2/ximgproc.hpp>
2+
#include "Mat.h"
3+
#include "macros.h"
4+
5+
#if OPENCV_MINOR_VERSION > 0
6+
7+
#ifndef __FF_SUPERPIXELLSC_H__
8+
#define __FF_SUPERPIXELLSC_H__
9+
10+
class SuperpixelLSC : public Nan::ObjectWrap {
11+
public:
12+
cv::Ptr<cv::ximgproc::SuperpixelLSC> superpixelLsc;
13+
cv::Mat img;
14+
cv::Mat labels;
15+
cv::Mat labelContourMask;
16+
int regionSize = 10;
17+
float ratio = 0.075;
18+
int numCalculatedSuperpixels = 0;
19+
20+
static NAN_MODULE_INIT(Init);
21+
static NAN_METHOD(New);
22+
static NAN_METHOD(Iterate);
23+
24+
static FF_GETTER_JSOBJ(SuperpixelLSC, GetImg, img, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
25+
static FF_GETTER_JSOBJ(SuperpixelLSC, GetLabels, labels, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
26+
static FF_GETTER_JSOBJ(SuperpixelLSC, GetLabelContourMask, labelContourMask, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
27+
static FF_GETTER(SuperpixelLSC, GetRegionSize, regionSize);
28+
static FF_GETTER(SuperpixelLSC, GetRatio, ratio);
29+
static FF_GETTER(SuperpixelLSC, GetNumCalculatedSuperpixels, numCalculatedSuperpixels);
30+
31+
static Nan::Persistent<v8::FunctionTemplate> constructor;
32+
};
33+
34+
#endif
35+
36+
#endif

cc/modules/ximgproc/SuperpixelSLIC.cc

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
#ifdef HAVE_XIMGPROC
2+
3+
#if OPENCV_MINOR_VERSION > 0
4+
5+
#include "SuperpixelSLIC.h"
6+
7+
Nan::Persistent<v8::FunctionTemplate> SuperpixelSLIC::constructor;
8+
9+
NAN_MODULE_INIT(SuperpixelSLIC::Init) {
10+
v8::Local<v8::FunctionTemplate> ctor = Nan::New<v8::FunctionTemplate>(SuperpixelSLIC::New);
11+
v8::Local<v8::ObjectTemplate> instanceTemplate = ctor->InstanceTemplate();
12+
constructor.Reset(ctor);
13+
instanceTemplate->SetInternalFieldCount(1);
14+
ctor->SetClassName(Nan::New("SuperpixelSLIC").ToLocalChecked());
15+
16+
Nan::SetAccessor(instanceTemplate, Nan::New("img").ToLocalChecked(), SuperpixelSLIC::GetImg);
17+
Nan::SetAccessor(instanceTemplate, Nan::New("labels").ToLocalChecked(), SuperpixelSLIC::GetLabels);
18+
Nan::SetAccessor(instanceTemplate, Nan::New("labelContourMask").ToLocalChecked(), SuperpixelSLIC::GetLabelContourMask);
19+
Nan::SetAccessor(instanceTemplate, Nan::New("algorithm").ToLocalChecked(), SuperpixelSLIC::GetAlgorithm);
20+
Nan::SetAccessor(instanceTemplate, Nan::New("regionSize").ToLocalChecked(), SuperpixelSLIC::GetRegionSize);
21+
Nan::SetAccessor(instanceTemplate, Nan::New("ruler").ToLocalChecked(), SuperpixelSLIC::GetRuler);
22+
Nan::SetAccessor(instanceTemplate, Nan::New("numCalculatedSuperpixels").ToLocalChecked(), SuperpixelSLIC::GetNumCalculatedSuperpixels);
23+
24+
Nan::SetPrototypeMethod(ctor, "iterate", SuperpixelSLIC::Iterate);
25+
26+
target->Set(Nan::New("SuperpixelSLIC").ToLocalChecked(), ctor->GetFunction());
27+
};
28+
29+
NAN_METHOD(SuperpixelSLIC::New) {
30+
FF_METHOD_CONTEXT("SuperpixelSLIC::New");
31+
if (!info.IsConstructCall()) {
32+
FF_THROW("expected new key word");
33+
}
34+
SuperpixelSLIC* self = new SuperpixelSLIC();
35+
36+
FF_ARG_INSTANCE(0, self->img, Mat::constructor, FF_UNWRAP_MAT_AND_GET);
37+
FF_ARG_INT(1, self->algorithm);
38+
FF_ARG_INT_IFDEF(2, self->regionSize, 10);
39+
FF_ARG_INT_IFDEF(3, self->ruler, 10.0);
40+
41+
self->Wrap(info.Holder());
42+
self->superpixelSlic = cv::ximgproc::createSuperpixelSLIC(
43+
self->img,
44+
self->algorithm,
45+
self->regionSize,
46+
self->ruler
47+
);
48+
info.GetReturnValue().Set(info.Holder());
49+
}
50+
51+
NAN_METHOD(SuperpixelSLIC::Iterate) {
52+
FF_METHOD_CONTEXT("SuperpixelSLIC::Iterate");
53+
54+
FF_ARG_UINT_IFDEF(0, uint iterations, 10);
55+
56+
SuperpixelSLIC* self = FF_UNWRAP(info.This(), SuperpixelSLIC);
57+
self->superpixelSlic->iterate((int)iterations);
58+
self->superpixelSlic->getLabels(self->labels);
59+
self->numCalculatedSuperpixels = self->superpixelSlic->getNumberOfSuperpixels();
60+
self->superpixelSlic->getLabelContourMask(self->labelContourMask, false);
61+
}
62+
63+
#endif
64+
65+
#endif // HAVE_XIMGPROC

cc/modules/ximgproc/SuperpixelSLIC.h

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
#include <opencv2/ximgproc.hpp>
2+
#include "Mat.h"
3+
#include "macros.h"
4+
5+
#if OPENCV_MINOR_VERSION > 0
6+
7+
#ifndef __FF_SUPERPIXELSLIC_H__
8+
#define __FF_SUPERPIXELSLIC_H__
9+
10+
class SuperpixelSLIC : public Nan::ObjectWrap {
11+
public:
12+
cv::Ptr<cv::ximgproc::SuperpixelSLIC> superpixelSlic;
13+
cv::Mat img;
14+
cv::Mat labels;
15+
cv::Mat labelContourMask;
16+
int algorithm;
17+
int regionSize = 10;
18+
float ruler = 10.0;
19+
int numCalculatedSuperpixels = 0;
20+
21+
static NAN_MODULE_INIT(Init);
22+
static NAN_METHOD(New);
23+
static NAN_METHOD(Iterate);
24+
25+
static FF_GETTER_JSOBJ(SuperpixelSLIC, GetImg, img, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
26+
static FF_GETTER_JSOBJ(SuperpixelSLIC, GetLabels, labels, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
27+
static FF_GETTER_JSOBJ(SuperpixelSLIC, GetLabelContourMask, labelContourMask, FF_UNWRAP_MAT_AND_GET, Mat::constructor);
28+
static FF_GETTER(SuperpixelSLIC, GetAlgorithm, algorithm);
29+
static FF_GETTER(SuperpixelSLIC, GetRegionSize, regionSize);
30+
static FF_GETTER(SuperpixelSLIC, GetRuler, ruler);
31+
static FF_GETTER(SuperpixelSLIC, GetNumCalculatedSuperpixels, numCalculatedSuperpixels);
32+
33+
static Nan::Persistent<v8::FunctionTemplate> constructor;
34+
};
35+
36+
#endif
37+
38+
#endif

cc/modules/ximgproc/ximgproc.cc

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,15 @@
22

33
#include "ximgproc.h"
44
#include "SuperpixelSEEDS.h"
5+
#include "SuperpixelSLIC.h"
6+
#include "SuperpixelLSC.h"
57

68
NAN_MODULE_INIT(XImgproc::Init) {
79
SuperpixelSEEDS::Init(target);
10+
#if OPENCV_MINOR_VERSION > 0
11+
SuperpixelSLIC::Init(target);
12+
SuperpixelLSC::Init(target);
13+
#endif
814
}
915

1016
#endif // HAVE_XIMGPROC

0 commit comments

Comments
 (0)