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

Commit 90c5bf0

Browse files
committed
kmeans: do not accept Vec3 or Vec2 as input
1 parent 1aa92cd commit 90c5bf0

File tree

2 files changed

+22
-7
lines changed

2 files changed

+22
-7
lines changed

cc/core/core.cc

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -123,32 +123,32 @@ NAN_METHOD(Core::Kmeans) {
123123
std::vector<int> labels;
124124
cv::Mat centersMat;
125125

126-
if (FF_IS_INSTANCE(Point2::constructor, data0) || FF_IS_INSTANCE(Vec2::constructor, data0)) {
126+
if (FF_IS_INSTANCE(Point2::constructor, data0)) {
127127
std::vector<cv::Point2f> data;
128128
Point::unpackJSPoint2Array(data, jsData);
129129
cv::kmeans(data, k, labels, termCriteria, attempts, flags, centersMat);
130130
}
131-
else if (FF_IS_INSTANCE(Point3::constructor, data0) || FF_IS_INSTANCE(Vec3::constructor, data0)) {
131+
else if (FF_IS_INSTANCE(Point3::constructor, data0)) {
132132
std::vector<cv::Point3f> data;
133133
Point::unpackJSPoint3Array(data, jsData);
134134
cv::kmeans(data, k, labels, termCriteria, attempts, flags, centersMat);
135135
}
136136
else {
137-
FF_THROW("unknowned input data type");
137+
FF_THROW("expected arg0 to be an Array of Points");
138138
}
139139

140140
FF_OBJ ret = FF_NEW_OBJ();
141141
FF_PACK_ARRAY(jsLabels, labels);
142142
Nan::Set(ret, FF_NEW_STRING("labels"), jsLabels);
143143

144-
if (FF_IS_INSTANCE(Point2::constructor, data0) || FF_IS_INSTANCE(Vec2::constructor, data0)) {
144+
if (FF_IS_INSTANCE(Point2::constructor, data0)) {
145145
std::vector<cv::Point2f> centers;
146146
for (int i = 0; i < centersMat.rows; i++) {
147147
centers.push_back(cv::Point2f(centersMat.at<float>(i, 0), centersMat.at<float>(i, 1)));
148148
}
149149
Nan::Set(ret, FF_NEW_STRING("centers"), Point::packJSPoint2Array<float>(centers));
150150
}
151-
else if (FF_IS_INSTANCE(Point3::constructor, data0) || FF_IS_INSTANCE(Vec3::constructor, data0)) {
151+
else if (FF_IS_INSTANCE(Point3::constructor, data0)) {
152152
std::vector<cv::Point3f> centers;
153153
for (int i = 0; i < centersMat.rows; i++) {
154154
centers.push_back(cv::Point3f(centersMat.at<float>(i, 0), centersMat.at<float>(i, 1), centersMat.at<float>(i, 2)));

test/tests/core/core.test.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,9 +123,9 @@ describe('core', () => {
123123
// related to https://github.com/justadudewhohacks/opencv4nodejs/issues/379
124124
const points3 = [
125125
[255, 0, 0], [255, 0, 0], [255, 0, 255], [255, 0, 255], [255, 255, 255]
126-
].map(([r, g, b]) => new cv.Vec3(r, g, b));
126+
].map(([x, y, z]) => new cv.Point(x, y, z));
127127

128-
it('should return correct centers with Vec3', () => {
128+
it('should return correct centers with Point3', () => {
129129
const ret = cv.kmeans(points3, k, termCriteria, attempts, flags);
130130

131131
const l0 = ret.labels[0];
@@ -141,6 +141,21 @@ describe('core', () => {
141141
expect(ret.centers[l2].y).to.equal(255);
142142
expect(ret.centers[l2].y).to.equal(255);
143143
});
144+
it('should raise error for invalid type', () => {
145+
const points3 = [
146+
[255, 0, 0], [255, 0, 0], [255, 0, 255], [255, 0, 255], [255, 255, 255]
147+
].map(([x, y, z]) => new cv.Vec(x, y, z));
148+
149+
let err;
150+
151+
try {
152+
cv.kmeans(points3, k, termCriteria, attempts, flags);
153+
} catch(e){
154+
err = e;
155+
}
156+
157+
expect(err.message).to.equal("Core::Kmeans - expected arg0 to be an Array of Points");
158+
});
144159
});
145160

146161
describe('cartToPolar', () => {

0 commit comments

Comments
 (0)