我正在使用 html5 画布处理红眼去除效果。我使用 tracking.js 来跟踪眼睛。检查以下代码。
html
<!-- Include tracking js libraries -->
<script src="js/tracking-min.js"></script>
<script src="js/eye-min.js"></script>
<img id="sourceImg" src="red_eye1.jpg" width="202" height="187">
<canvas id="myCanvas" width="202" height="187" style="border:1px solid #d3d3d3;"></canvas>
Javascript
document.getElementById("sourceImg").onload = function() {
var c = document.getElementById("myCanvas");
var ctx = c.getContext("2d");
var img = document.getElementById("sourceImg");
ctx.drawImage(img, 0, 0);
// track eyes
var tracker = new tracking.ObjectTracker(['eye']);
tracker.setStepSize(1.7);
tracking.track('#sourceImg', tracker);
tracker.on('track', function(event) {
event.data.forEach(function(rect) {
// rect consists area of each eyes.
var imgData = ctx.getImageData(rect.x, rect.y, rect.width, rect.height);
// remove red eye
var i;
for (i = 0; i < imgData.data.length; i += 4) {
// find and check red intensity
var redIntensity = (imgData.data[i] / ((imgData.data[i+1] + imgData.data[i+2]) / 2));
if (redIntensity > 1.5) // 1.5 because it gives the best results
{
// reduce red to the average of blue and green
imgData.data[i] = (imgData.data[i+1] + imgData.data[i+2]) / 2;
}
}
ctx.putImageData(imgData, rect.x, rect.y);
});
});
};
我得到了以下结果。
此处红眼成功消除。但它影响了眼睛周围的颜色。因为 tracking.js 返回的眼睛区域包括周围区域。如何跟踪眼球,这将解决这个问题。