【发布时间】:2013-12-17 11:24:36
【问题描述】:
我使用 HTML5 和 JavaScript 制作了一个简单的图像处理/过滤器 Web 应用程序。每个过滤器都可以正常工作,如亮度、灰度、负片等。除了锐化图像,边缘检测各种邻域操作都不起作用。
我已经尝试了所有可能的方法,尝试了谷歌,寻找参考但失败了。我找到的参考资料显示了矩阵系统,我知道矩阵系统的概念,但不知道如何应用。如果我能解决我的问题,那就太好了。请在下面查看我的代码,目前,我正在发布我的 Sharp 图像代码。
我找到了这样的东西来锐化图像 ( [ 0, -1, 0, -1, 5, -1, 0, -1, 0 ]),但我不知道如何申请。所以我尝试像下面的代码一样应用它
<script>
function pic() {
var c = document.getElementById('myCanvas');
var ctx = c.getContext('2d');
var btnsharpen = document.getElementById('btnsharpen');
var img = new Image();
img.onload = function () {
ctx.drawImage(img, 0, 0);
}
//sharp the image
btnsharpen.onclick = function(){
ctx.drawImage(img, 0, 0);
var imgData = ctx.getImageData(0,0, c.width, c.height);
var pixels = imgData.data;
var numPixels = ((imgData.width-1) *(imgData*4)+ ((imgData.height)*4));
for (var i = 0, n = numPixels; i < n; i +=4) {
var sharpen = (pixels[i] * 0 + pixels[i + 1] * 0 + pixels[i + 2] * 0) +
(pixels[i] * -1 + pixels[i + 1] * -1 + pixels[i + 2] * -1) +
(pixels[i] * 0 + pixels[i + 1] * 0 + pixels[i + 2] * 0) +
(pixels[i] * -1 + pixels[i + 1] * -1 + pixels[i + 2] * -1) +
(pixels[i] * 5 + pixels[i + 1] * 5 + pixels[i + 2] * 5) +
(pixels[i] * -1 + pixels[i + 1] * -1 + pixels[i + 2] * -1) +
(pixels[i] * 0 + pixels[i + 1] * 0 + pixels[i + 2] * 0) +
(pixels[i] * -1 + pixels[i + 1] * -1 + pixels[i + 2] * -1) +
(pixels[i] * 0 + pixels[i + 1] * 0 + pixels[i + 2] * 0);
pixels[i] = sharpen; // red
pixels[i + 1] = sharpen; // green
pixels[i + 2] = sharpen; // blue
}
ctx.putImageData(imgData, 0, 0);
img.src = "image/Angelina_Jolie.jpg";
}
</script>
<body onLoad="pic()">
<canvas id='myCanvas' width='500' height='375' style='border:solid 1px #000000'></canvas>
<input type="button" value="Sharpen" class="buttons" id="btnsharpen" /><br />
</body>
【问题讨论】:
-
您搜索的是 JavaScript 库还是 C 库?
-
no @GameAlchemist 我没有搜索过......我真的很头疼这个问题
-
我尝试了几次,但没有成功,我知道 3x3 卷积矩阵的概念,但我不知道如何在代码中应用它...... :(
标签: javascript html canvas filter pixels