Autojs实现图片转字符串(简易ocr预备步骤)

应用场景

识别一些背景较单纯、切字符不被扭曲的图片上的数字

作者: 栞栞

步骤

1、首先将图片进行预处理(灰度化、转换色彩空间、二值化)

var gray_img = images.grayscale(img);
var binary_img = images.threshold(gray_img, 120, 255, "BINARY");
var cvt_img = images.cvtColor(binary_img, "GRAY2BGRA");

2、接着将图片中的数字分割出来,由于大部分图片的数字都是从左到右排列,而将图片转化为字符串之后,从上到下操作更为便捷,因此首先先将图片旋转90°。

var  rotate_img = images.rotate(origin_img, 90);

3、图片转字符串

var widthDelta = img.getWidth();
var heightDelta = img.getHeight();
var imgArray = [];
//这里的i为y轴,j为x轴
//将图片转化为0、1放进数组里面
let post_data = { re: 0, start: 0, arr: [] };
for (let i = 0; i < heightDelta; i++) {
    let count = 0;
    for (let j = 0; j < widthDelta; j++) {
        count += img.pixel(j, i) == -1 ? 0 : 1;
    }
    count = count ? 1 : 0;
    if (post_data.re !== count) {
        post_data.re = count;
        if (count == 0) {
            post_data.arr.push([post_data.start, i]);
            post_data.start = i + 1;
        }
    }
    imgArray.push(count);
}

4、此时imgArray里面都是每个数字的界限,接着便按照界限将字符串切割开来,并进行转字符串的操作

for (let k = 0; k < post_data.arr.length; k++) {
    let img_fragment = images.clip(
        cvt_img,
        post_data.arr[k][0],
        0,
        post_data.arr[k][1] - post_data.arr[k][0] + 1,
        img.getHeight()
    );
    let widthDelta_ = img_fragment.getWidth();
    let heightDelta_ = img_fragment.getHeight();
    let img_array = [];
    //这里的i为y轴,j为x轴
    //将图片转化为0、1放进数组里面
    for (let i = 0; i < heightDelta_; i++) {
        img_array.push([]);
        for (let j = 0; j < widthDelta_; j++) {
            img_array[i].push(img_fragment.pixel(j, i) == -1 ? 0 : 1);
        }
    }
}

原图

处理后的字符串


源码

var img = images.read("");
var gray_img = images.grayscale(img);
var binary_img = images.threshold(gray_img, 150, 255, "BINARY");
gray_img.recycle();
var cvt_img = images.cvtColor(binary_img, "GRAY2BGRA");
binary_img.recycle();
var rotate_img = images.rotate(cvt_img, 90);
let widthDelta = rotate_img.getWidth();
let heightDelta = rotate_img.getHeight();
//这里的i为y轴,j为x轴
//将图片转化为0、1放进数组里面
let post_data = { re: 0, start: 0, arr: [] };
for (let i = 0; i < heightDelta; i++) {
  let count = 0;
  for (let j = 0; j < widthDelta; j++) {
    count += rotate_img.pixel(j, i) == -1 ? 0 : 1;
  }
  count = count ? 1 : 0;
  if (post_data.re !== count) {
    post_data.re = count;
    if (count == 0) {
      post_data.arr.push([post_data.start, i]);
      post_data.start = i + 1;
    }
  }
}
rotate_img.recycle();
for (let k = 0; k < post_data.arr.length; k++) {
  let img_fragment = images.clip(
    cvt_img,
    post_data.arr[k][0],
    0,
    post_data.arr[k][1] - post_data.arr[k][0] + 1,
    img.getHeight()
  );
  let widthDelta_ = img_fragment.getWidth();
  let heightDelta_ = img_fragment.getHeight();
  images.save(img_fragment, k + ".png");
  let img_array = [];
  //这里的i为y轴,j为x轴
  //将图片转化为0、1放进数组里面
  for (let i = 0; i < heightDelta_; i++) {
    img_array.push([]);
    for (let j = 0; j < widthDelta_; j++) {
      img_array[i].push(img_fragment.pixel(j, i) == -1 ? 0 : 1);
    }
  }
  img_fragment.recycle();
  log(img_array);
}
cvt_img.recycle();

bilibili

牙叔教程

微信公众号 牙叔教程

在这里插入图片描述

QQ群

747748653
在这里插入图片描述

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
AutoJS中,数组字符串可以通过使用join()方法来实现。join()方法可以将数组中的所有元素化为一个字符串,并将它们合并在一起。 下面是示例代码: var arr = ["apple", "orange", "banana"]; var str = arr.join(","); log(str); // 输出:apple,orange,banana 在上述代码中,我们定义了一个数组arr,其中包含了三个元素。我们使用join()方法将这个数组换成一个用逗号分隔的字符串,将其赋值给变量str。最后,我们打印出这个字符串。 除了使用逗号作为分隔符以外,我们还可以使用其他符号或者空字符串作为分隔符来进行数组换,例如: var arr = ["apple", "orange", "banana"]; var str1 = arr.join(""); var str2 = arr.join("-"); log(str1); // 输出:appleorangebanana log(str2); // 输出:apple-orange-banana 在使用join()方法时,需要注意数组中的元素类型。如果数组中包含数字类型的元素,则在换成字符串时不会进行类型换,而是将其作为字面值输出。 例如: var arr = [1, 2, 3]; var str = arr.join(","); log(str); // 输出:1,2,3 需要注意的是,join()方法不会改变原来的数组,而是返回换后的字符串。如果需要将字符串再次换为数组,可以使用split()方法。split()方法可以根据指定的分隔符将字符串分割成一个新的数组。 例如: var str = "apple,orange,banana"; var arr = str.split(","); log(arr); // 输出:["apple", "orange", "banana"] 在以上代码中,我们定义了一个字符串str,其中包含了用逗号分隔的三个元素。我们使用split()方法将这个字符串分割成一个新的数组,将其赋值给变量arr。最后,我们打印出这个数组。 总之,在AutoJS中,可以使用join()方法将数组换成字符串,使用split()方法将字符串换成数组。需要注意的是,在换过程中需要选择合适的分隔符。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牙叔教程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值