OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
无匹配项
使用 OpenCV.js

步骤

在本教程中,您将学习如何包含和开始在网页中使用 opencv.js。您可以从每个 版本 中的 opencv-{VERSION_NUMBER}-docs.zip 获取 opencv.js 的副本,或者直接从“https://docs.opencv.ac.cn/{VERSION_NUMBER}/opencv.js”中的在线文档下载预编译的脚本(例如,https://docs.opencv.ac.cn/4.5.0/opencv.js。如果您想要最新的版本,可以使用 4.x)。您还可以按照教程 编译 OpenCV.js 编译自己的副本。

创建网页

首先,我们创建一个能够上传图像的简单网页。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello OpenCV.js</title>
</head>
<body>
<h2>Hello OpenCV.js</h2>
<div>
<div class="inputoutput">
<img id="imageSrc" alt="No Image" />
<div class="caption">imageSrc <input type="file" id="fileInput" name="file" /></div>
</div>
</div>
<script type="text/javascript">
let imgElement = document.getElementById("imageSrc")
let inputElement = document.getElementById("fileInput");
inputElement.addEventListener("change", (e) => {
imgElement.src = URL.createObjectURL(e.target.files[0]);
}, false);
</script>
</body>
</html>

若要运行此网页,请复制上面的内容并保存到本地 index.html 文件。要运行它,请使用您的 Web 浏览器将其打开。

注意
最好使用本地 Web 服务器来托管 index.html。

包含 OpenCV.js

opencv.js 的 URL 设置为 <script> 标记的 src 属性。

注意
在本教程中,我们将 opencv.js 托管在与 index.html 相同的文件夹中。您也可以选择在我们的在线文档中使用预编译 opencv.js 的 URL。

同步加载示例

<script src="opencv.js" type="text/javascript"></script>

您可能希望通过 <script> 标记中的 async 属性异步加载 opencv.js。若要在 opencv.js 准备就绪时收到通知,您可以向 onload 属性注册一个回调函数。

异步加载示例

<script async src="opencv.js" onload="onOpenCvReady();" type="text/javascript"></script>

使用 OpenCV.js

opencv.js 准备就绪时,您可以通过 cv 对象访问 OpenCV 对象和函数。

例如,您可以通过 cv.imread 从图像中创建 cv.Mat

注意
由于图像加载是异步的,您需要将 cv.Mat 创建放入 onload 回调中。
imgElement.onload = function() {
let mat = cv.imread(imgElement);
}

许多 OpenCV 函数可用于处理 cv.Mat。有关详情,您可以参考其他教程,例如 图像处理

在本教程中,我们只在屏幕上显示一个 cv.Mat。要显示 cv.Mat,您需要一个画布元素。

<canvas id="outputCanvas"></canvas>

您可以使用 cv.imshow 在画布上显示 cv.Mat

cv.imshow("outputCanvas", mat);

将所有步骤汇总起来,最终 index.html 如下所示。

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Hello OpenCV.js</title>
</head>
<body>
<h2>Hello OpenCV.js</h2>
<p id="status">OpenCV.js 正在加载...</p>
<div>
<div class="inputoutput">
<img id="imageSrc" alt="No Image" />
<div class="caption">imageSrc <input type="file" id="fileInput" name="file" /></div>
</div>
<div class="inputoutput">
<canvas id="canvasOutput" ></canvas>
<div class="caption">canvasOutput</div>
</div>
</div>
<script type="text/javascript">
let imgElement = document.getElementById('imageSrc');
let inputElement = document.getElementById('fileInput');
inputElement.addEventListener('change', (e) => {
imgElement.src = URL.createObjectURL(e.target.files[0]);
}, false);
imgElement.onload = function() {
let mat = cv.imread(imgElement);
cv.imshow('canvasOutput', mat);
mat.delete();
};
var Module = {
// https://emscripten.org/docs/api_reference/module.html#Module.onRuntimeInitialized
onRuntimeInitialized() {
document.getElementById('status').innerHTML = 'OpenCV.js 已准备就绪。';
}
};
</script>
<script async src="opencv.js" type="text/javascript"></script>
</body>
</html>
注意
您必须调用 cv.Mat 的 delete 方法才能释放 Emscripten 堆中分配的内存。有关详情,请参阅 Emscripten 的内存管理

尝试一下