我在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 ..编辑:,所有函数都不能工作,cv::Mat。
发布于 2021-03-29 13:51:15
这并不是包含的问题,因为如果opencv2/opencv.hpp模块是可用的,那么会自动地将所有模块的顶级头引入。显而易见的结论是,这些模块在您的OpenCV构建中是不可用的,现在的问题是为什么会这样呢?
事实证明,有些OpenCV功能不适合网络,而opencv.js是在没有它的情况下构建的。
cv::namedWindow、cv::imshow和cv::waitKey函数属于highgui模块。该模块的实现依赖于平台(在构建时,您必须选择将要使用的后端,无论是WinAPI、WinRT、Gtk、Qt、cocoa等等)。此外,由于浏览器中的JavaScript代码运行在沙箱中,所以无论如何都不可能访问API。
函数cv::imread属于imgcodecs模块,还有一个在本例中没有构建的模块。我不知道造成这种情况的确切原因(可能是因为其中一些直接访问文件系统),https://github.com/opencv/opencv/issues/17535问题表明第三方编解码器尚未集成到opencv.js中,绑定生成器中缺少一些机制。
https://stackoverflow.com/questions/66853917
复制相似问题