You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

关于MNIST手写数据集的边框去除及二值图像灰度值转换的技术咨询

关于MNIST手写数据集的边框去除及二值图像灰度值转换的技术咨询

看起来你在处理MNIST手写数字图像时碰到了两个实际问题,我结合你提到的思路,给你梳理下具体的解决办法:

一、如何去除手写数字图像的空白边框

你想到的水平/垂直投影、轮廓检测都是非常靠谱的方向,具体落地可以这么做:

  • 基于投影的裁剪法
    1. 先计算图像的水平投影与垂直投影:水平投影就是统计每一行里代表数字的像素(假设你的图像中数字是1,背景是0)的数量,垂直投影则统计每一列的有效像素数。
    2. 确定有效区域的边界:找到水平方向上第一个有有效像素的行、最后一个有有效像素的行;垂直方向同理找到左右的有效列边界。
    3. 按照这个边界裁剪图像,就能精准去掉周围的空白边框,之后你可以再把裁剪后的数字图像居中填充到目标尺寸(比如原MNIST的28x28大小)。
  • 基于轮廓检测的裁剪法
    1. 用轮廓检测工具(比如OpenCV的findContours函数)定位图像中数字的轮廓,因为MNIST图像里只有一个数字,所以最大的那个轮廓就是目标。
    2. 提取该轮廓的外接矩形坐标,用这个矩形区域裁剪图像,同样能去掉空白边框,后续再做居中处理即可。

二、将仅含0和1的二值图像转换为0-255范围的灰度图像

这个操作非常直接,只需要做数值缩放就行:

  • 如果你的图像是以NumPy数组形式存储的,直接执行gray_image = binary_image * 255即可。这样原来的0(背景)保持为0,原来的1(数字)会变成255,刚好对应8位灰度图像的黑、白极值,完美覆盖0-255的灰度范围。
  • 要是后续需要更灵活的调整,也可以用归一化再缩放的方式,但对于0-1转0-255,直接乘255是最高效的方法。

你提到已经尝试把数字放在图像中心,这个步骤和去边框是相辅相成的,裁剪完边框后用空白填充的方式把数字居中,处理后的图像会更规整,很适合后续的模型训练或者图像分析。

备注:内容来源于stack exchange,提问作者kkwadk

火山引擎 最新活动