我正在尝试做的事情:
我所做的或多或少与此处描述的相同:
这里是javascript部分(来自给定链接的冗长部分:]:>
var openFile = function (e) { const fileReader = new FileReader(); fileReader.onload = (event) => { const uint8Arr = new Uint8Array(event.target.result); passToWasm(uint8Arr); }; fileReader.readAsArrayBuffer(e.target.files[0]); }; function passToWasm(uint8ArrData) { // copying the uint8ArrData to the heap const numBytes = uint8ArrData.length * uint8ArrData.BYTES_PER_ELEMENT; const dataPtr = Module._malloc(numBytes); const dataOnHeap = new Uint8Array(Module.HEAPU8.buffer, dataPtr, numBytes); dataOnHeap.set(uint8ArrData); // calling the Wasm function console.log(dataOnHeap.byteOffset); const res = Module._image_input(dataOnHeap.byteOffset, uint8ArrData.length); Module._free(dataPtr); }
这是C ++部分(几乎逐字记录:)>
int image_input(int offset, size_t size) //query image input { uint8_t* pos; pos = reinterpret_castw<uint8_t*>(offset); cv::Mat raw_data = cv::Mat(1, size, CV_8UC1, pos); cout << raw_data << endl; img_object = cv::imdecode(raw_data, cv::IMREAD_GRAYSCALE); cout << img_object << endl; }
[当我使用一些jpg图像进行测试时,C ++部分的
raw_data
和JS部分的uint8ArrData
包含相同的信息:这是15253个数字的列表,例如[255, 216, 255, 224, ..., 184, 227, 255, 217]
现在,行
img_object = cv::imdecode(raw_data, cv::IMREAD_GRAYSCALE);
返回一个空矩阵
[]
。我做错了什么?我必须在JS端进行一些预处理吗?
我正在尝试做的事情:用户在html中加载图像opencv在C ++中接收该图像并对其进行一些工作。我所做的与此处所述大致相同:https://answers.opencv ....
如所提供的链接中所述,解决方案是使用画布并将像素列表(以4x480x640数字为例)发送到C ++。
在JS方面,您有