最近看了Justany_WhiteSnow的Javascript图像处理一文,写的非常好,于是就练练手,略做了一些封装:

(function () {function imageToGray(iCanvas, url) {this.canvas = iCanvas;this.iCtx = this.canvas.getContext("2d");this.url = url;}imageToGray.prototype = {imread: function (_image) {var width = _image.width,height = _image.height;this.iResize(width, height);this.iCtx.drawImage(_image, 0, 0);var imageData = this.iCtx.getImageData(0, 0, width, height),tempMat = new Mat(height, width, imageData.data);imageData = null;this.iCtx.clearRect(0, 0, width, height);return tempMat;},iResize: function (_width, _height) {this.canvas.width = _width;this.canvas.height = _height;},RGBA2ImageData: function (_imgMat) {var width = _imgMat.col,height = _imgMat.row,imageData = this.iCtx.createImageData(width, height);imageData.data.set(_imgMat.data);return imageData;},render: function () {var img = new Image();var _this = this;img.onload = function () {var myMat = _this.imread(img);var newImage = cvtColor(myMat);var newIamgeData = _this.RGBA2ImageData(newImage);_this.iCtx.putImageData(newIamgeData, 0, 0);};img.src = this.url;}};function Mat(_row, _col, _data, _buffer){this.row = _row || 0;this.col = _col || 0;this.channel = 4;this.buffer = _buffer || new ArrayBuffer(_row * _col * 4);this.data = new Uint8ClampedArray(this.buffer);_data && this.data.set(_data);this.bytes = 1;this.type = "CV_RGBA";}function cvtColor(_src) {if (_src.type && _src.type === "CV_RGBA") {var row = _src.row,col = _src.col;var dst = new Mat(row, col);data = dst.data,data2 = _src.data;var pix1, pix2, pix = _src.row * _src.col * 4;while (pix) {data[pix -= 4] = data[pix1 = pix + 1] = data[pix2 = pix + 2] = (data2[pix] * 299 + data2[pix1] * 587 + data2[pix2] * 114) / 1000;data[pix + 3] = data2[pix + 3];}} else {return src;}return dst;}window.imageToGray = imageToGray;
})();

  调用方式如下:

var iCanvas = document.getElementById("grayImage");//canvas element
var imgToGray = new imageToGray(iCanvas, "images/1.jpg");
imgToGray.render();

  给一个完整的小例子吧:)

  本想给个在线运行地址的,但由于园子的图片存在另一个域名下,getImageData存在跨域安全问题,所以就给个下载地址吧(要放在本地的web service上运行哦,或直接丢在VS中运行也可以): 点此下载

  最后来张福利,哈哈!

转载于:https://www.cnblogs.com/artwl/archive/2013/01/16/2862093.html

Javascript图像处理之将彩色图转换成灰度图相关推荐

  1. OprenCV学习之路一:将彩色图片转换成灰度图

    //将一张彩色图片转成灰度图:#include<cv.h> #include<cvaux.h> #include<highgui.h> #include<ml ...

  2. 彩色BMP转换成灰度图的原理

    图像处理中,大部分的处理方法都需要事先把彩色图转换成灰度图才能进行相关的计算.识别. 彩色图转换灰度图的原理如下: 我们知道彩色位图是由R/G/B三个分量组成,其文件存储格式为 BITMAPFILEH ...

  3. Intel Realsense D435 opencv 为什么将color图转换成灰度图后,再与depth图水平堆叠,其结果一片黑色?(数据未map到0-255)

    相关代码 # -*- coding: utf-8 -*- """ @File : obstacle_detection.py @Time : 2019/12/11 10: ...

  4. opencv:把三通道图转换成灰度图、二值图

    #include <opencv2/core/core.hpp> #include<opencv2/highgui/highgui.hpp> #include<openc ...

  5. 彩色图批量转换成灰度图、批量格式转换、批量重命名

    参考:http://blog.csdn.net/jjff46/article/details/38948621 代码实现的功能:把图片进行批量转换 (1)彩色图片转换成灰度图 (2)图片进行格式转换 ...

  6. Windows Forms:在C#中将图像转换成灰度图

    Windows Forms:在C#中将图像转换成灰度图 本文翻译自Windows Forms: Convert an image into grayscale in C# 这篇文章向你展示在C# Wi ...

  7. MATLAB应用实战系列(七十一)-MATLAB实战应用案例:图像处理将灰度图片变成负片彩色图片转换成灰度图片

    前言 本文目录 获取图片的信息 将灰度图片变成负片 彩色图片转换成灰度图片 图像噪声的添加 加10次噪声 colorbar的使用 将数据转换为图片 clc clearA是结构体名,用来存储读入的图像数 ...

  8. DFD图转换成SC图

    例题: (1)有如下DFD图,其中竖虚线输入.变换.输出之间的间隔,请将其转换成SC图: 解:由图我们可以看出第一竖虚线左边是输入部分,中间是变换部分,又边则是输出部分.从而我们可以知道一级sc图除主 ...

  9. 把频谱图转换成声压级图

    从可以听到的强度最小的声音,到强度大到能够引起痛觉的声音,声强的绝对值相差一千万亿倍.显然,用声强的绝对值表示声音的大小是不方便的.为了便于应用,人们便根据人耳对声音强弱变化响应的特性,引出一个对数量 ...

最新文章

  1. 【展开讲讲?xmind日常小知识】xmind2020插入表格
  2. html密码框不显示,密码框中密码的显示与隐藏切换(JS)
  3. 开源绘画应用 Pinta 已移植到GTK 3和.NET 6
  4. 我为什么在这里写博客
  5. 半夜,滴滴司机问我会LRU吗?
  6. Linux系统:centos7下搭建ElasticSearch中间件,常用接口演示
  7. 【Anaconda安装包】如何在Ananconda环境下安装CV2(opencv)
  8. 随手记_C++常考面试题
  9. debian编译openjdk8
  10. 常见分布的期望方差矩母函数
  11. mac降级safari_如何在Mac上的Safari中将网页另存为PDF
  12. Mac 右键展示Copy path
  13. php写超级简单的登陆注册页面(适用期末作业至少要求带有数据库的)
  14. Linux哲学家进餐杀死进程,经典进程的同步问题之——哲学家进餐
  15. 4.6.2 IPv6的地址
  16. 淘宝奇门接口的签名方法
  17. app开发大致流程介绍(给非专业人士通俗易懂的明白):
  18. 关于RIGOL可编程电源连接说明(网口连接)
  19. c语言OBD编程,汽车OBD2诊断程序开发
  20. 利用树莓派搭建校园网种子站

热门文章

  1. 《数据库SQL实战》查找所有员工的last_name和first_name以及对应的dept_name
  2. 高斯噪声和椒盐噪声python
  3. python数据结构练习
  4. spark之12:集群模式概述
  5. golang bloom filter实现
  6. Spark-submit提交任务到集群
  7. 求最大值及其下标编程总结
  8. 远程访问windows上的oracle不能正常连接
  9. “报复黑客”:可行的战略还是重大的风险?
  10. faked 一个用于 mock 后端 API 的轻量工具