Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 自动调整亮度/对比度以从图像中读取文本_Javascript_Camera_Image Manipulation - Fatal编程技术网

Javascript 自动调整亮度/对比度以从图像中读取文本

Javascript 自动调整亮度/对比度以从图像中读取文本,javascript,camera,image-manipulation,Javascript,Camera,Image Manipulation,我想知道是否有人能给我指出一个正确的方向,使用javascript自动调整手机摄像头拍摄的图像的亮度/对比度,以便更轻松地读取图像中的文本 谢谢你的帮助 非常感谢。要自动调整图像,我们可以使用从图像生成的直方图,然后使用阈值找到一个黑白点,用于将像素值缩放到相对端的最大值 在HTML5中,我们需要使用canvas元素来读取像素信息 建立柱状图 直方图是图像中最能代表哪些值的概览。对于亮度对比度,我们感兴趣的是亮度值——像素的感知亮度 luma直方图示例 要计算luma值,我们可以使用REC.7

我想知道是否有人能给我指出一个正确的方向,使用javascript自动调整手机摄像头拍摄的图像的亮度/对比度,以便更轻松地读取图像中的文本

谢谢你的帮助


非常感谢。

要自动调整图像,我们可以使用从图像生成的直方图,然后使用阈值找到一个黑白点,用于将像素值缩放到相对端的最大值

在HTML5中,我们需要使用canvas元素来读取像素信息

建立柱状图

直方图是图像中最能代表哪些值的概览。对于亮度对比度,我们感兴趣的是亮度值——像素的感知亮度

luma直方图示例

要计算luma值,我们可以使用REC.709又名BT.709(此处推荐使用)或REC.601公式

Y = 0.299 * R + 0.587 * G + 0.114 * B
我们需要将其转换为整数iluma=Math.roundluma;,否则,我们将很难构建基于整数值[0255]的直方图来存储,请参见下面的示例代码

确定使用哪个范围的策略可能会有所不同,但为了简单起见,我们可以根据两端像素的最小表示选择阈值策略

显示阈值示例的红线

为了找到基于阈值的最暗值,我们将从左向右扫描,当我们得到高于阈值的亮度值时,使用该值作为最小值。如果我们到达中心,甚至只有33%,我们可以中止并默认为0

对于最亮的,我们也会这样做,但从右到左,如果没有找到阈值,则默认为255

当然,你可以为每一个终端使用不同的阈值——这都是一个尝试和错误的游戏,直到你找到适合你场景的东西

我们现在应该有两个值代表最小-最大范围:

scale = 255 / (max - min) * 2
基于阈值的最小-最大范围

缩放通用luma级别

首先,根据最小-最大范围计算我们需要使用的比例因子:

scale = 255 / (max - min) * 2
我们将始终从每个组件中减去min,即使这意味着如果<0,它将被剪裁。将值设置为0。减去后,我们使用比例因子缩放每个分量值。末尾的x2用于补偿luma和实际RGB值之间的变化。像这里的其他值一样使用此值只是一个任意示例

我们对每个像素0剪辑和缩放中的每个组件执行此操作:

component = max(0, component - min) * scale
当图像数据放回时,基于给定的阈值,对比度应为最大

提示

您不必使用整个图像位图来分析直方图。如果你处理的是大的图像源,你不需要太多,因为我们需要的是最亮/最暗的区域,而不是单个像素

您可以使用与图像自身的混合模式(如倍增、增亮、硬光/软光等)来增亮和添加对比度图像。maxH maxH=hgram[i]; } //将其用作阈值 thold*=最大值; //查找最小值 fori=0;i<宽度*0.5;i++{ 如果hgram[i]>thold{ min=i; 打破 } } 如果最小值<0,则最小值=0;//未找到,设置为默认值0 //查找最大值 fori=宽度-1;i>宽度*0.5;我-{ 如果hgram[i]>thold{ max=i; 打破 } } 如果max<0 max=255;//未找到,设置为默认255 比例=255/最大-最小*2;//x2用价值补偿游戏 out.innerHTML=Min:+Min+Max:+Max+ 比例:+Scale.toFixed1+x; //缩放所有像素 fori=0;i为了自动调整图像,我们可以使用从图像生成的直方图,然后使用阈值找到一个黑白点,用于将像素值缩放到相对端的最大值

在HTML5中,我们需要使用canvas元素来读取像素信息

建立柱状图

直方图是图像中最能代表哪些值的概览。对于亮度对比度,我们感兴趣的是亮度值——像素的感知亮度

luma直方图示例

要计算luma值,我们可以使用REC.709又名BT.709(此处推荐使用)或REC.601公式

Y = 0.299 * R + 0.587 * G + 0.114 * B
我们需要将其转换为整数iluma=Math.roundluma;,否则,我们将很难构建基于整数值[0255]的直方图来存储,请参见示例代码b 私奔

确定使用哪个范围的策略可能会有所不同,但为了简单起见,我们可以根据两端像素的最小表示选择阈值策略

显示阈值示例的红线

为了找到基于阈值的最暗值,我们将从左向右扫描,当我们得到高于阈值的亮度值时,使用该值作为最小值。如果我们到达中心,甚至只有33%,我们可以中止并默认为0

对于最亮的,我们也会这样做,但从右到左,如果没有找到阈值,则默认为255

当然,你可以为每一个终端使用不同的阈值——这都是一个尝试和错误的游戏,直到你找到适合你场景的东西

我们现在应该有两个值代表最小-最大范围:

scale = 255 / (max - min) * 2
基于阈值的最小-最大范围

缩放通用luma级别

首先,根据最小-最大范围计算我们需要使用的比例因子:

scale = 255 / (max - min) * 2
我们将始终从每个组件中减去min,即使这意味着如果<0,它将被剪裁。将值设置为0。减去后,我们使用比例因子缩放每个分量值。末尾的x2用于补偿luma和实际RGB值之间的变化。像这里的其他值一样使用此值只是一个任意示例

我们对每个像素0剪辑和缩放中的每个组件执行此操作:

component = max(0, component - min) * scale
当图像数据放回时,基于给定的阈值,对比度应为最大

提示

您不必使用整个图像位图来分析直方图。如果你处理的是大的图像源,你不需要太多,因为我们需要的是最亮/最暗的区域,而不是单个像素

您可以使用与图像自身的混合模式(如倍增、增亮、硬光/软光等)来增亮和添加对比度图像。maxH maxH=hgram[i]; } //将其用作阈值 thold*=最大值; //查找最小值 fori=0;i<宽度*0.5;i++{ 如果hgram[i]>thold{ min=i; 打破 } } 如果最小值<0,则最小值=0;//未找到,设置为默认值0 //查找最大值 fori=宽度-1;i>宽度*0.5;我-{ 如果hgram[i]>thold{ max=i; 打破 } } 如果max<0 max=255;//未找到,设置为默认255 比例=255/最大-最小*2;//x2用价值补偿游戏 out.innerHTML=Min:+Min+Max:+Max+ 比例:+Scale.toFixed1+x; //缩放所有像素 fori=0;i画布和位图操作。如果不要求是永久性的,那么可以应用CSS过滤器。当然,CSS不允许自动调整。自动调整需要画布+直方图。既然你想让它自动调整,你必须编写大量代码来评估当前的图像状态,并继续增加或变暗亮度/对比度。创建一个JS应用程序会更容易,根据用户自己的喜好对亮度和对比度进行滑块调整。这可能不是您的目标,所以对于自动版本,请确保您的代码执行@K3N在其答案中建议的操作…画布和位图操作。如果不要求是永久性的,那么可以应用CSS过滤器。当然,CSS不允许自动调整。自动调整需要画布+直方图。既然你想让它自动调整,你必须编写大量代码来评估当前的图像状态,并继续增加或变暗亮度/对比度。创建一个JS应用程序会更容易,根据用户自己的喜好对亮度和对比度进行滑块调整。这可能不是您的目标,所以对于自动版本,请确保您的代码符合@K3N在其答案中的建议…完美。。。谢谢很抱歉,我的工作因其他优先事项而暂停,因此无法更早地回到这一点……这是一个多么伟大和详细的回答啊!完美的谢谢很抱歉,我的工作因其他优先事项而暂停,因此无法更早地回到这一点……这是一个多么伟大和详细的回答啊!