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

Commit faf93c3

Browse files
committed
Add SuperpixelLSC functionality
1 parent bb12146 commit faf93c3

File tree

4 files changed

+94
-1
lines changed

4 files changed

+94
-1
lines changed

binding.gyp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +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",
45+
"cc/modules/ximgproc/SuperpixelSLIC.cc",
46+
"cc/modules/ximgproc/SuperpixelLSC.cc",
4647
"cc/modules/objdetect/objdetect.cc",
4748
"cc/modules/objdetect/CascadeClassifier.cc",
4849
"cc/modules/objdetect/HOGDescriptor.cc",

cc/modules/ximgproc/SuperpixelLSC.cc

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

cc/modules/ximgproc/SuperpixelLSC.h

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

cc/modules/ximgproc/ximgproc.cc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
#include "ximgproc.h"
44
#include "SuperpixelSEEDS.h"
55
#include "SuperpixelSLIC.h"
6+
#include "SuperpixelLSC.h"
67

78
NAN_MODULE_INIT(XImgproc::Init) {
89
SuperpixelSEEDS::Init(target);
910
SuperpixelSLIC::Init(target);
11+
SuperpixelLSC::Init(target);
1012
}
1113

1214
#endif // HAVE_XIMGPROC

0 commit comments

Comments
 (0)