Skip to content

Commit 4d3757b

Browse files
feat: mat creation with data
1 parent 52b28e2 commit 4d3757b

File tree

4 files changed

+80
-10
lines changed

4 files changed

+80
-10
lines changed

cpp/FOCV_Object.cpp

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,9 @@
1111
#include "jsi/TypedArray.h"
1212
#include <opencv2/opencv.hpp>
1313
#include "ConvertImage.hpp"
14+
#include "jsi/TypedArray.h"
15+
16+
using namespace mrousavy;
1417

1518
// General idea and this function for hashing is from
1619
// https://mrousavy.com/blog/Hashing-String-Ifs
@@ -35,8 +38,29 @@ jsi::Object FOCV_Object::create(jsi::Runtime& runtime, const jsi::Value* argumen
3538
int rows = arguments[1].asNumber();
3639
int cols = arguments[2].asNumber();
3740
int type = arguments[3].asNumber();
38-
cv::Mat object(rows, cols, type);
39-
id = FOCV_Storage::save(object);
41+
42+
if(arguments[4].isObject()) {
43+
auto rawArray = arguments[4].asObject(runtime);
44+
auto array = rawArray.asArray(runtime);
45+
46+
auto rawLength = rawArray.getProperty(runtime, "length");
47+
auto length = rawLength.asNumber();
48+
49+
std::vector<float> vec;
50+
51+
for(auto i = 0; i < length; i++) {
52+
vec.push_back(array.getValueAtIndex(runtime, i).asNumber());
53+
}
54+
55+
cv::Mat mat{vec, true};
56+
mat = mat.reshape(1, rows);
57+
mat.convertTo(mat, type);
58+
59+
id = FOCV_Storage::save(mat);
60+
} else {
61+
cv::Mat object(rows, cols, type);
62+
id = FOCV_Storage::save(object);
63+
}
4064
} break;
4165
case hashString("mat_vector", 10): {
4266
std::vector<cv::Mat> object;
@@ -123,6 +147,7 @@ jsi::Object FOCV_Object::convertToJSI(jsi::Runtime& runtime, const jsi::Value* a
123147
switch(hashString(objectType.c_str(), objectType.size())) {
124148
case hashString("mat", 3): {
125149
auto mat = *FOCV_Storage::get<cv::Mat>(id);
150+
mat.convertTo(mat, CV_8U);
126151

127152
value.setProperty(runtime, "base64", jsi::String::createFromUtf8(runtime, ImageConverter::mat2str(mat)));
128153
value.setProperty(runtime, "size", jsi::Value(mat.size));

example/ios/Podfile.lock

Lines changed: 50 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,7 @@ PODS:
936936
- React-Mapbuffer (0.74.4):
937937
- glog
938938
- React-debug
939-
- react-native-fast-opencv (0.1.0):
939+
- react-native-fast-opencv (0.2.0):
940940
- DoubleConversion
941941
- glog
942942
- hermes-engine
@@ -979,7 +979,7 @@ PODS:
979979
- ReactCommon/turbomodule/bridging
980980
- ReactCommon/turbomodule/core
981981
- Yoga
982-
- react-native-skia (1.3.10):
982+
- react-native-skia (1.3.11):
983983
- DoubleConversion
984984
- glog
985985
- hermes-engine
@@ -1235,7 +1235,51 @@ PODS:
12351235
- React-logger (= 0.74.4)
12361236
- React-perflogger (= 0.74.4)
12371237
- React-utils (= 0.74.4)
1238-
- RNReanimated (3.14.0):
1238+
- RNReanimated (3.15.0):
1239+
- DoubleConversion
1240+
- glog
1241+
- hermes-engine
1242+
- RCT-Folly (= 2024.01.01.00)
1243+
- RCTRequired
1244+
- RCTTypeSafety
1245+
- React-Codegen
1246+
- React-Core
1247+
- React-debug
1248+
- React-Fabric
1249+
- React-featureflags
1250+
- React-graphics
1251+
- React-ImageManager
1252+
- React-NativeModulesApple
1253+
- React-RCTFabric
1254+
- React-rendererdebug
1255+
- React-utils
1256+
- ReactCommon/turbomodule/bridging
1257+
- ReactCommon/turbomodule/core
1258+
- RNReanimated/reanimated (= 3.15.0)
1259+
- RNReanimated/worklets (= 3.15.0)
1260+
- Yoga
1261+
- RNReanimated/reanimated (3.15.0):
1262+
- DoubleConversion
1263+
- glog
1264+
- hermes-engine
1265+
- RCT-Folly (= 2024.01.01.00)
1266+
- RCTRequired
1267+
- RCTTypeSafety
1268+
- React-Codegen
1269+
- React-Core
1270+
- React-debug
1271+
- React-Fabric
1272+
- React-featureflags
1273+
- React-graphics
1274+
- React-ImageManager
1275+
- React-NativeModulesApple
1276+
- React-RCTFabric
1277+
- React-rendererdebug
1278+
- React-utils
1279+
- ReactCommon/turbomodule/bridging
1280+
- ReactCommon/turbomodule/core
1281+
- Yoga
1282+
- RNReanimated/worklets (3.15.0):
12391283
- DoubleConversion
12401284
- glog
12411285
- hermes-engine
@@ -1520,9 +1564,9 @@ SPEC CHECKSUMS:
15201564
React-jsitracing: 4e9c99e73a6269b27b0d4cbab277dd90df3e5ac0
15211565
React-logger: fbfb50e2a2b1b46ee087f0a52739fadecc5e81a4
15221566
React-Mapbuffer: d39610dff659d8cf1fea485abae08bbf6f9c8279
1523-
react-native-fast-opencv: ab1ec9e61ccab56c9120d847eefddd636eea859a
1567+
react-native-fast-opencv: d143740f4a4f50a0946a00fbc7e8069ea5427695
15241568
react-native-image-picker: c3afe5472ef870d98a4b28415fc0b928161ee5f7
1525-
react-native-skia: 4857f8a85d0e4fc152c7b8aff4fbcc7573be1cf9
1569+
react-native-skia: 8da84ea9410504bf27f0db229539a43f6caabb6a
15261570
react-native-worklets-core: f51430dd07bf5343d4918d28a4bb00fe8f98b982
15271571
React-nativeconfig: 2be4363c2c4ac2b42419577774e83e4e4fd2af9f
15281572
React-NativeModulesApple: 453ada38f826a508e48872c7a7877c431af48bba
@@ -1547,7 +1591,7 @@ SPEC CHECKSUMS:
15471591
React-runtimescheduler: 3f312d33f475467a59864e0c5ab8708461387d1c
15481592
React-utils: e8b0eac797c81c574b24f6515fec4015599b643c
15491593
ReactCommon: eebffb37a90138c6db6eb8b2d952e7e5c6bc083c
1550-
RNReanimated: f4ff116e33e0afc3d127f70efe928847c7c66355
1594+
RNReanimated: 45553a3ae29a75a76269595f8554d07d4090e392
15511595
SocketRocket: abac6f5de4d4d62d24e11868d7a2f427e0ef940d
15521596
vision-camera-resize-plugin: 4306d5df9bce0e603bbe6ab04337f21a606f4ad1
15531597
VisionCamera: 057aff621f7801b7d99a00d157fa39244bbd4fd2

src/functions/ImageProcessing/ImageFiltering.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ export type ImageFiltering = {
132132
name: 'filter2D',
133133
src: Mat,
134134
dst: Mat,
135-
ddepth: DataTypes,
135+
ddepth: number,
136136
kernel: Mat,
137137
anchor: Point,
138138
delat: number,

src/objects/Objects.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,8 @@ export type Objects = {
2121
type: ObjectType.Mat,
2222
rows: number,
2323
cols: number,
24-
dataType: DataTypes
24+
dataType: DataTypes,
25+
data?: number[]
2526
): Mat;
2627
createObject(type: ObjectType.MatVector): MatVector;
2728
createObject(type: ObjectType.Point, x: number, y: number): Point;

0 commit comments

Comments
 (0)