所以给定一个数据表的图像,我想删除所有的行。我将一条线分类为连续像素,无论是垂直还是水平。
因此,结果将删除所有网格线,基本上留下文本和数字。
有没有办法使用Javascript的图像数据删除所有行? 就像我想到的那样,循环一个包含2D图像像素的2D数组,找到所有线条并将其颜色改变为周围的颜色,使其“消失”。 所以这会修改图像的图像数据。
答案 0 :(得分:1)
最简单的方法是遍历所有像素行,检查所有像素是否为"黑色"如果是的话,把它们变成白色。然后对所有像素列执行相同操作。
for(var i=0; i<imageData.width; i++){
for(var j=0; j<imageData.height; j++){
var pixel = imageData[i * imageData.width + j];
vas isBlack = checkIfBlack(pixel);
if (isBlack === false) {
break;
}
}
for(var j=0; j<imageData.height; j++){
for(var k=0; k<4; k++){
imageData[i * imageData.width + j + k] = 255;
}
}
}
for(var i=0; i<imageData.height; i++){
for(var j=0; j<imageData.width; j++){
var pixel = imageData[i + j * imageData.width];
vas isBlack = checkIfBlack(pixel);
if (isBlack === false) {
break;
}
}
for(var j=0; j<imageData.height; j++){
for(var k=0; k<4; k++){
imageData[i + j * imageData.width + k] = 255;
}
}
}
变量imageData
的构建方式如图here。
我故意遗漏了函数checkIfBlack()
。最简单的实现是检查RGB通道是否全部为0(或至少低于阈值)。
function checkIfBlack(pixel, threshold) {
threshold = threshold || 0;
for(var i=0; i<3; i++) {
if(pixel[i] > threshold) {
return false;
}
}
return true;
}
答案 1 :(得分:0)
opencv中的大多数常规功能现已移植到Javascript(opencv.js)中。 这是霍夫变换的链接。 https://docs.opencv.org/3.3.1/d3/de6/tutorial_js_houghlines.html
您可以使用hough变换识别水平和垂直线并将其移除。
否则,如果您想在Javscript中实现自己的代码,可以按照此处的说明找到所有连接的组件 - https://en.wikipedia.org/wiki/Connected-component_labeling。
连接后组件标签,您可以根据其几何尺寸和像素密度移除大型连接组件。
希望有所帮助:)