<!DOCTYPE html>
<html> <head>
<meta charset="utf-8">
<title>Hello OpenCV.js</title>
<style type="text/css">
.inputoutput {
float: left;
margin: 10px;
}
</style>
</head> <body>
<h2>Hello OpenCV.js</h2>
<p id="status">OpenCV.js is loading...</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);
mat = face2(mat, 4, 3);
cv.imshow('canvasOutput', mat);
mat.delete();
}; function onOpenCvReady() {
document.getElementById('status').innerHTML = 'OpenCV.js is ready.';
}
function face2(image, value1, value2) { let dst = new cv.Mat();
if (value1 == null || value1 == undefined) value1 = 3;//磨皮系数
if (value2 == null || value2 == undefined) value2 = 1;//细节系数 0.5 - 2 var dx = value1 * 5;//双边滤波参数
var fc = value1 * 12.5;//参数
var p = 0.1;//透明度 let temp1 = new cv.Mat(), temp2 = new cv.Mat(), temp3 = new cv.Mat(), temp4 = new cv.Mat(); cv.cvtColor(image, image, cv.COLOR_RGBA2RGB, 0); cv.bilateralFilter(image, temp1, dx, fc, fc);//bilateralFilter(Src) let temp22 = new cv.Mat();
cv.subtract(temp1, image, temp22);//bilateralFilter(Src) - Src cv.add(temp22, new cv.Mat(image.rows, image.cols, image.type(), new cv.Scalar(128, 128, 128, 128)), temp2);//bilateralFilter(Src) - Src + 128 cv.GaussianBlur(temp2, temp3, new cv.Size(2 * value2 - 1, 2 * value2 - 1), 0, 0);
//2 * GuassBlur(bilateralFilter(Src) - Src + 128) - 1 let temp44 = new cv.Mat();
temp3.convertTo(temp44, temp3.type(), 2, -255);
//2 * GuassBlur(bilateralFilter(Src) - Src + 128) - 256 cv.add(image, temp44, temp4);
cv.addWeighted(image, p, temp4, 1 - p, 0.0, dst);
//Src * (100 - Opacity) cv.add(dst, new cv.Mat(image.rows, image.cols, image.type(), new cv.Scalar(10, 10, 10, 0)), dst);
//(Src * (100 - Opacity) + (Src + 2 * GuassBlur(bilateralFilter(Src) - Src + 128) - 256) * Opacity) /100 return dst;
}
</script>
<script async src="js/opencv.js" onload="onOpenCvReady();" type="text/javascript"></script>
</body> </html>

  js下载地址 : https://pan.baidu.com/s/1ZMkhcPw31hmW9qOeeOr7fQ 密码:r5wh

速度很快,效果很好接下来啃英文文档去...

opencv.js小案例的更多相关文章

  1. JS小案例:循环间隔重复变色

    在A.B.C三个区块中,有且仅有一个红色,要求红色每隔一秒即进入下一个区块,变色过程不断循环往复. 参考代码: <!DOCTYPE html> <html lang="zh ...

  2. node.js(小案例)_实现学生信息增删改

    一.前言 本节内容主要对小案例做一个总结: 1.如何开始搭建小项目 2.路由设计 3.模块应用 4.项目源码以及实现过程github地址: 项目演示如下: 二.主要内容 1.项目的关键性js源码: 项 ...

  3. Vue.js小案例、生命周期函数及axios的使用

    一.调色框小案例: 随着三个滑动框的变化,颜色框的颜色随之改变 1.1.实例代码 <!DOCTYPE html> <html lang="en" xmlns:v- ...

  4. node.js小案例_留言板

    一.前言 通过这个案例复习: 1.node.js中模板引擎的使用 2.node.js中的页面跳转和重定向 二.主要内容 1.案列演示:  2.案列源码:https://github.com/45612 ...

  5. JS小案例--全选和全不选列表功能的实现

    纯js代码实现列表全选和全不选的功能 <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  6. node.js(小案例)_使用mongodb对学生信息列表优化

    一.前言 1.这篇文章主要对上一篇案列在操作增删改的时候使用mongodb进行优化 2.项目源码(包含上):https://github.com/4561231/crud-express-node.g ...

  7. Vue.js小案例(2)

    即时搜索 这个例子主要应用了vue.js的自定义过滤器,可以通过Vue.filter()注册一个全局过滤器,具体用法可以参考这里,vue.js也提供了一些内置过滤器. CSS代码: [v-cloak] ...

  8. Vue.js小案例(1)

    数据绑定 数据绑定是vue.js的基础.本例中就是利用了vue.js的v-model指令在表单元素上创建双向数据绑定. <!--这是我们的View--> <div id=" ...

  9. JS小案例(基础好烦恼少)----持续更新

    *************************************************** <!DOCTYPE html> <html lang="en&quo ...

随机推荐

  1. DVWA平台v1.8-SQL注入(low级别)

    代码 <?php if(isset($_GET['Submit'])){ // Retrieve data $id = $_GET['id']; $getid = "SELECT fi ...

  2. ceph 创建和删除osd

    ceph 创建和删除osd 1.概述         本次主要是使用ceph-deploy工具和使用ceph的相关命令实现在主机上指定磁盘创建和删除osd,本次以主机172.16.1.96(主机名ha ...

  3. python's twelth day for me

    闭包: 内层函数对外层函数的变量(非全局变量)的引用. python 遇到闭包,有一个机制,会开辟一个空间,将闭包中的全部变量放入其中.且不会随着函数的结束而关闭. 闭包的完美体现:装饰器. 打印函数 ...

  4. js日期date对象

    js日期 日期对象的一些属性和方法 var date = new Date() date.toString() // "Tue Jan 29 2019 22:58:13 GMT+0800 ( ...

  5. oracle 查询中实现分页

    那么Oracle如何实现分页呢?--Oracle分页查询SELECT   * FROM   (     SELECT         ROWNUM R,YANGCQ_ID,YANGCQ_BRANCHI ...

  6. python与桶排序

    问题提出: 将以下数据: 6, 8, 2, 3, 4, 0, 9, 1, 5,1 按从小到达排列. 桶排序原理: 桶排序也叫计数排序,简单来说,就是将数据集里面所有元素按顺序列举出来,然后统计元素出现 ...

  7. SSD惊悚的跪了,找回数据

    1.电脑出现小bug,例如显示乱码,开机变慢等,都是SSD跪的前兆,哭,我怎么就没看出来,而且没有备份过数据. 2.终于,PC死机了...OK,重启,纳尼?起不来... 3.大哭,所有代码,所有论文不 ...

  8. Monthly Expense(二分--最小化最大值)

    Farmer John is an astounding accounting wizard and has realized he might run out of money to run the ...

  9. 使用jq.lazyload.js,解决设置loading图片的问题

    最近在使用lazyload的时候,遇上一个问题.当对img做宽100%时,就是placeholder的loading图片也会100%宽,这样一般来说loading图片就会变得很大.实在是不能应用到项目 ...

  10. Golang简单写文件操作的四种方法

    package main import ( "bufio" //缓存IO "fmt" "io" "io/ioutil" ...