cv::imread 和其他人不能使用 emscripten?
cv::imread and other does not working with emscripten?
我有以下带有 opencv 的 C++ 代码。它是显示图像的基本代码。
我正在尝试使用 emscripten 对其进行编译,但似乎 emscripten 无法加载 opencv 的某些功能。例如 cv::Mat 没问题。
build_js 的测试一切顺利。
你知道我做错了什么吗?
代码:
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <emscripten/emscripten.h>
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
cv::Mat image;
image = cv::imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
cv::namedWindow("Display Image");
cv::imshow("Display Image", image);
cv::waitKey(0);
return 0;
}
错误信息:
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:15:13: error: use of undeclared identifier 'imread'
image = cv::imread( argv[1], 1 );
^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:21:9: error: no member named 'namedWindow' in namespace 'cv'
cv::namedWindow("Display Image");
~~~~^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:22:9: error: no member named 'imshow' in namespace 'cv'
cv::imshow("Display Image", image);
~~~~^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:23:9: error: no member named 'waitKey' in namespace 'cv'
cv::waitKey(0);
~~~~^
4 errors generated.
cmake 命令:
emcmake cmake -DOpenCV_DIR=/home/vasek/tools/opencv/build_js ..
编辑:
None 函数工作除 cv::Mat.
这不是包含的问题,因为 opencv2/opencv.hpp
自动拉入所有模块 top-level headers if 模块可用.显而易见的结论是,这些模块在您构建的 OpenCV 中不可用,现在的问题是为什么会这样?
事实证明,某些 OpenCV 功能不适合 Web,opencv.js 构建时没有它。
函数cv::namedWindow
、cv::imshow
和cv::waitKey
属于highgui
模块。此模块的实现是 platform-dependent(在构建时你必须 select 将要使用的后端,可以是 WinAPI、WinRT、Gtk、Qt、cocoa 等)。此外,由于(AFAIK)浏览器中的 JavaScript 代码在沙箱中运行,因此无论如何都无法访问 API。
函数cv::imread
属于imgcodecs
module, yet another one that is not built in this case. I don't know the exact reason for this (perhaps due to some of it directly accessing filesystem), and the issue https://github.com/opencv/opencv/issues/17535表示第三方编解码器还没有集成到opencv.js并且绑定生成器中缺少一些机制。
我有以下带有 opencv 的 C++ 代码。它是显示图像的基本代码。 我正在尝试使用 emscripten 对其进行编译,但似乎 emscripten 无法加载 opencv 的某些功能。例如 cv::Mat 没问题。
build_js 的测试一切顺利。 你知道我做错了什么吗?
代码:
#include <stdio.h>
#include <opencv2/opencv.hpp>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <emscripten/emscripten.h>
int main(int argc, char** argv )
{
if ( argc != 2 )
{
printf("usage: DisplayImage.out <Image_Path>\n");
return -1;
}
cv::Mat image;
image = cv::imread( argv[1], 1 );
if ( !image.data )
{
printf("No image data \n");
return -1;
}
cv::namedWindow("Display Image");
cv::imshow("Display Image", image);
cv::waitKey(0);
return 0;
}
错误信息:
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:15:13: error: use of undeclared identifier 'imread'
image = cv::imread( argv[1], 1 );
^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:21:9: error: no member named 'namedWindow' in namespace 'cv'
cv::namedWindow("Display Image");
~~~~^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:22:9: error: no member named 'imshow' in namespace 'cv'
cv::imshow("Display Image", image);
~~~~^
/home/vasek/project_test/opencv/opencvgcccmake_emscript/DisplayImage.cpp:23:9: error: no member named 'waitKey' in namespace 'cv'
cv::waitKey(0);
~~~~^
4 errors generated.
cmake 命令:
emcmake cmake -DOpenCV_DIR=/home/vasek/tools/opencv/build_js ..
编辑: None 函数工作除 cv::Mat.
这不是包含的问题,因为 opencv2/opencv.hpp
自动拉入所有模块 top-level headers if 模块可用.显而易见的结论是,这些模块在您构建的 OpenCV 中不可用,现在的问题是为什么会这样?
事实证明,某些 OpenCV 功能不适合 Web,opencv.js 构建时没有它。
函数cv::namedWindow
、cv::imshow
和cv::waitKey
属于highgui
模块。此模块的实现是 platform-dependent(在构建时你必须 select 将要使用的后端,可以是 WinAPI、WinRT、Gtk、Qt、cocoa 等)。此外,由于(AFAIK)浏览器中的 JavaScript 代码在沙箱中运行,因此无论如何都无法访问 API。
函数cv::imread
属于imgcodecs
module, yet another one that is not built in this case. I don't know the exact reason for this (perhaps due to some of it directly accessing filesystem), and the issue https://github.com/opencv/opencv/issues/17535表示第三方编解码器还没有集成到opencv.js并且绑定生成器中缺少一些机制。