 | |  |  | AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
- /*
- 🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
- 🍎OpenCV 图像处理方法小结
- */
- //🍎OpenCV 类 [opencv] 方法小结
- // 第一个方法:📌findImagesEx - cv文件找图(模板匹配cv找图)
- /*
- 类别 详情说明
- 方法功能 基于cv文件进行模板匹配找图,返回匹配到的目标数组
- 方法签名 Detect[] opencv.findImagesEx (String cvFile)
- 返回值 Detect[](匹配到的目标数组,每个元素包含位置、相似度等信息)
- 参数 - String cvFile:cv格式的模板文件路径
- */
- // 示例:基于cv文件找图
- let findResults = opencv.findImagesEx("./template.cv");
- print.log("cv文件找图结果:", findResults);
- // 第二个方法:📌OCREx - cv文件OCR(模板匹配OCR)
- /*
- 类别 详情说明
- 方法功能 基于cv文件模板进行文字识别,返回OCR识别结果
- 方法签名 OcrResult opencv.OCREx (String cvFile)
- 返回值 OcrResult(OCR识别结果对象,包含识别到的文字及位置信息)
- 参数 - String cvFile:cv格式的OCR模板文件路径
- */
- // 示例:基于cv文件进行OCR识别
- let ocrResult = opencv.OCREx("./textTemplate.cv");
- print.log("OCR识别文字:", ocrResult.text);
- // 第三个方法:📌templateMatch - 多模板匹配查找目标对象
- /*
- 类别 详情说明
- 方法功能 基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等
- 方法签名 Detect[] opencv.templateMatch (Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best)
- 返回值 Detect[](匹配到的目标数组)
- 参数 - Mat mat:待匹配的原始图像(Mat对象)
- - String[] templates:模板图片路径数组
- - Double threshold:匹配阈值(0-1,值越高匹配越严格)
- - Double[] roi:匹配区域百分比数组,格式为 [x, y, width, height],默认全图 [0,0,1,1]
- - Boolean best:是否只返回最优匹配结果(true则只返回最佳匹配,false返回所有符合阈值的结果)
- */
- // 示例:多模板匹配指定区域
- const templates = ["./tpl1.png", "./tpl2.png"];
- const matchResults = opencv.templateMatch(mat, templates, 0.8, [0.2, 0.2, 0.6, 0.6], true);
- print.log("模板匹配结果:", matchResults);
- // 第四个方法:📌findImages - 多图查找(支持超时和质量设置)
- /*
- 类别 详情说明
- 方法功能 同时查找多张相似图片,超时未找到则返回null;可设置截图质量、超时时间等
- 方法签名 Detect[]|null opencv.findImages (String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects)
- 返回值 Detect[]|null(匹配成功返回目标数组,失败返回null)
- 参数 - String[] images:待查找的图片路径数组
- - Double threshold:相似度阈值(0-1)
- - Int32 timeOut:超时时间(毫秒,超过该时间未找到则返回null)
- - Int32 quality:屏幕截图质量(0:标清,1:高清,2:超清)
- - Double[] rects:查找区域百分比数组,格式为 [x, y, width, height],默认全图
- */
- // 示例:多图查找并设置超时
- const targetImages = ["./img1.png", "./img2.png"];
- const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
- if (multiFindResults) {
- print.log("多图查找成功,结果:", multiFindResults);
- } else {
- print.err("多图查找超时或失败");
- }
- // 第五个方法:📌toGray - 图像转灰度图
- /*
- 类别 详情说明
- 方法功能 将输入的Mat图像转换为灰度图(直接修改原始Mat对象)
- 方法签名 void opencv.toGray (Mat src)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待转换的原始图像(Mat对象)
- */
- // 示例:将图像转为灰度图
- const grayMat = image.getMat(); // 假设从image对象获取Mat
- opencv.toGray(grayMat);
- print.log("图像已转为灰度图:", grayMat);
- // 第六个方法:📌extractRegion - 图像裁切(从大图中截图裁切)
- /*
- 类别 详情说明
- 方法功能 按百分比区域裁切图像,可选择仅保留裁切部分或保留原图大小(其他区域变白)
- 方法签名 void opencv.extractRegion (Mat sourceImage, Double[] roiPercent, Boolean iscut)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat sourceImage:待裁切的原始图像(Mat对象)
- - Double[] roiPercent:裁切区域百分比数组,格式为 [x, y, width, height]
- - Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
- */
- // 示例:裁切图像中间50%区域并仅保留裁切部分
- opencv.extractRegion(mat, [0.25, 0.25, 0.5, 0.5], true);
- print.log("图像已裁切:", mat);
- // 第七个方法:📌threshold - 图像二值化处理
- /*
- 类别 详情说明
- 方法功能 将图像转换为黑白二值图(像素值在[min, max]区间外为黑色,区间内为白色)
- 方法签名 void opencv.threshold (Mat src, Int32 min, Int32 max)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待二值化的原始图像(Mat对象)
- - Int32 min:二值化最小阈值(0-255)
- - Int32 max:二值化最大阈值(0-255)
- */
- // 示例:截屏并进行二值化处理(含后续流程)
- const binImg = screen.screenShotFull();
- const binMat = binImg.getMat();
- opencv.threshold(binMat, 50, 200); // 阈值区间50-200
- // 转Image并OCR识别
- const binImg2 = new Image();
- binImg2.readMat(binMat);
- const ocrRes = binImg2.ocr(0, 0, 1, 1);
- print.log("二值化后OCR结果:", ocrRes);
- // 释放内存
- binMat.close();
- binImg.close();
- binImg2.close();
- // 第八个方法:📌invertColor - 图像颜色翻转(反色处理)
- /*
- 类别 详情说明
- 方法功能 对图像进行颜色翻转,将每个像素的RGB值反转(如白色→黑色、红色→青色等)
- 方法签名 void opencv.invertColor (Mat src)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待颜色翻转的原始图像(Mat对象)
- */
- // 示例:翻转图像颜色
- const invertMat = image.getMat();
- opencv.invertColor(invertMat);
- print.log("颜色已翻转的图像:", invertMat);
复制代码 方法 1:cv 文件找图(模版匹配 cv 找图)类别 | 内容 | 主题 | cv 文件找图、模版匹配 cv 找图 | 方法 | Detect[] findImagesEx(String cvFile) | 返回值 | Detect[] | 参数 | String cvFile : cv 文件 cv 文件 | 案例 | opencv.findImagesEx("") | 方法 2:cv 文件 OCR(模版匹配 OCR)类别 | 内容 | 主题 | cv 文件 OCR、模版匹配 OCR | 方法 | OcrResult OCREx(String cvFile) | 返回值 | OcrResult | 参数 | String cvFile : cv 文件 cv 文件 | 案例 | opencv.OCREx("") | 方法 3:模版匹配(通过模版匹配找到目标对象)类别 | 内容 | 主题 | 模版匹配;通过模版匹配找到目标对象 | 方法 | Detect[] templateMatch(Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best) | 返回值 | Detect[] | 参数 | Mat mat : mat 类型图片
String[] templates : 模版图片数组
Double threshold : 阈值 0-1
Double[] roi : 区域数组[0,0,1,1]
Boolean best
: 是否只返回最优解 | 案例 | opencv.templateMatch(Mat, String[], Double, Double[], true) | 方法 4:找多图类别 | 内容 | 主题 | 找多图 | 说明 | 找图,可设置多张相似图片;找图成功返回目标数组,失败返回null | 方法 | Detect[] findImages(String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects) | 返回值 | Detect[] | 参数 | String[] images : 图片数组
Double threshold : 相似度 0-1
Int32 timeOut : 超时时间(毫秒,超时未找到则退出)
Int32 quality : 屏幕截图质量(0 标清、1 高清、2 超清)
Double[] rects : 百分比区域 | 案例 | opencv.findImages(String[], Double, Int32, Int32, Double[]) | 方法 5:转灰度图(图像转灰度图)类别 | 内容 | 主题 | 转灰度图 | 说明 | 图像转灰度图 | 方法 | Void toGray(Mat src) | 返回值 | Void | 参数 | Mat src : mat 图像 mat 图像 | 案例 | opencv.toGray(Mat) | 方法 6:裁切图片(从大图中截图裁切图片)类别 | 内容 | 主题 | 裁切图片 | 说明 | 从大图中截图裁切图片 | 方法 | Void extractRegion(Mat sourceImage, Double[] roiPercent, Boolean iscut) | 返回值 | Void | 参数 | Mat sourceImage : mat 图像 mat 图像
Double[] roiPercent : 裁切区域百分数数组
Boolean iscut : true 只保留裁切部分,false 图片大小不变、其他区域变白 | 案例 | opencv.extractRegion(Mat, Double[], true) | 方法 7:二值化类别 | 内容 | 主题 | 二值化 | 方法 | Void threshold(Mat src, Int32 min, Int32 max) | 返回值 | Void | 参数 | Mat src : mat 格式图片
Int32 min : 最小阈值
Int32 max : 最大阈值 | 案例 | // 截屏并转成 mat 格式 var img = screen.screenShotFull(); var mat = img.getMat(); // 二值化操作(示例含后续流程:转 Image、OCR、释放内存等) opencv.threshold(mat, 50, 200); var img2 = new Image(); img2.readMat(mat); printl(img2); var ocrres = img2.ocr(0, 0, 1, 1); printl(ocrres); // 释放内存 mat.close(); img.close(); img2.close(); | 方法 8:颜色翻转类别 | 内容 | 主题 | 颜色翻转 | 方法 | Void invertColor(Mat src) | 返回值 | Void | 参数 | Mat src : mat 格式图片 | 案例 | opencv.invertColor(Mat) |
实战实例: - // ... existing code ...
- /*
- 🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
- 🍎OpenCV 图像处理方法小结
- */
- //🍎OpenCV 类 [opencv] 方法小结
- // 第一个方法:📌findImagesEx - cv文件找图(模板匹配cv找图)
- /*
- 类别 详情说明
- 方法功能 基于cv文件进行模板匹配找图,返回匹配到的目标数组
- 方法签名 Detect[] opencv.findImagesEx (String cvFile)
- 返回值 Detect[](匹配到的目标数组,每个元素包含位置、相似度等信息)
- 参数 - String cvFile:cv格式的模板文件路径
- */
- // 示例:基于cv文件找图
- function findImagesExExample() {
- printl("=== findImagesEx 方法示例 ===");
- try {
- // 使用cv文件查找图像
- let findResults = opencv.findImagesEx("图色961575.cv");
- printl("cv文件找图结果:", findResults);
-
- if (findResults && findResults.length > 0) {
- printl("找到 " + findResults.length + " 个匹配目标");
- for (let i = 0; i < findResults.length; i++) {
- let result = findResults[i];
- printl(" 目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
- }
- } else {
- printl("未找到匹配目标");
- }
- } catch (error) {
- printl("findImagesEx执行出错: " + error.message);
- }
- }
- // 调用示例
- findImagesExExample();
- // 第二个方法:📌OCREx - cv文件OCR(模板匹配OCR)
- /*
- 类别 详情说明
- 方法功能 基于cv文件模板进行文字识别,返回OCR识别结果
- 方法签名 OcrResult opencv.OCREx (String cvFile)
- 返回值 OcrResult(OCR识别结果对象,包含识别到的文字及位置信息)
- 参数 - String cvFile:cv格式的OCR模板文件路径
- */
- // 示例:基于cv文件进行OCR识别
- function ocrExExample() {
- printl("=== OCREx 方法示例 ===");
- try {
- var ocr1=opencv.OCREx('图色995593.cv');
- if(ocr1!=null){
- printl(ocr1.getAllString());
- } else {
- printl("OCR识别失败或未识别到文字");
- }
- } catch (error) {
- printl("OCREx执行出错: " + error.message);
- }
- }
- // 调用示例
- ocrExExample();
- // 第三个方法:📌templateMatch - 多模板匹配查找目标对象
- /*
- 类别 详情说明
- 方法功能 基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等
- 方法签名 Detect[] opencv.templateMatch (Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best)
- 返回值 Detect[](匹配到的目标数组)
- 参数 - Mat mat:待匹配的原始图像(Mat对象)
- - String[] templates:模板图片路径数组
- - Double threshold:匹配阈值(0-1,值越高匹配越严格)
- - Double[] roi:匹配区域百分比数组,格式为 [x, y, width, height],默认全图 [0,0,1,1]
- - Boolean best:是否只返回最优匹配结果(true则只返回最佳匹配,false返回所有符合阈值的结果)
- */
- // 示例:多模板匹配指定区域
- function templateMatchExample() {
- printl("=== templateMatch 方法示例 ===");
- try {
- // 截图获取图像
- const screenshot = screen.screenShotFull();
- const mat = screenshot.getMat();
-
- // 定义模板图片路径数组(请根据实际情况修改路径)
- const templates = ["./template1.png", "./template2.png"];
-
- // 在指定区域进行模板匹配
- const matchResults = opencv.templateMatch(mat, templates, 0.8, [0.2, 0.2, 0.6, 0.6], true);
- printl("模板匹配结果:", matchResults);
-
- if (matchResults && matchResults.length > 0) {
- printl("找到 " + matchResults.length + " 个匹配目标");
- for (let i = 0; i < matchResults.length; i++) {
- let result = matchResults[i];
- printl(" 目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
- }
- } else {
- printl("未找到匹配目标");
- }
-
- // 释放资源
- mat.close();
- screenshot.close();
- } catch (error) {
- printl("templateMatch执行出错: " + error.message);
- }
- }
- // 调用示例
- // templateMatchExample(); // 取消注释以运行示例
- // 第四个方法:📌findImages - 多图查找(支持超时和质量设置)
- /*
- 类别 详情说明
- 方法功能 同时查找多张相似图片,超时未找到则返回null;可设置截图质量、超时时间等
- 方法签名 Detect[]|null opencv.findImages (String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects)
- 返回值 Detect[]|null(匹配成功返回目标数组,失败返回null)
- 参数 - String[] images:待查找的图片路径数组
- - Double threshold:相似度阈值(0-1)
- - Int32 timeOut:超时时间(毫秒,超过该时间未找到则返回null)
- - Int32 quality:屏幕截图质量(0:标清,1:高清,2:超清)
- - Double[] rects:查找区域百分比数组,格式为 [x, y, width, height],默认全图
- */
- // 示例:多图查找并设置超时
- function findImagesExample() {
- printl("=== findImages 方法示例 ===");
- try {
- // 定义要查找的图片路径数组(请根据实际情况修改路径)
- const targetImages = ["图色961575.cv"];
-
- // 查找图片,设置阈值0.7,超时时间3000ms,高清质量,全图查找
- const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
-
- if (multiFindResults) {
- printl("多图查找成功,结果:", multiFindResults);
- printl("找到 " + multiFindResults.length + " 个匹配目标");
- for (let i = 0; i < multiFindResults.length; i++) {
- let result = multiFindResults[i];
- printl(" 目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
- }
- } else {
- printl("多图查找超时或失败");
- }
- } catch (error) {
- printl("findImages执行出错: " + error.message); // 修复:使用printl而不是print.err
- }
- }
- // 调用示例
- findImagesExample();
- // 第五个方法:📌toGray - 图像转灰度图
- /*
- 类别 详情说明
- 方法功能 将输入的Mat图像转换为灰度图(直接修改原始Mat对象)
- 方法签名 void opencv.toGray (Mat src)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待转换的原始图像(Mat对象)
- */
- // 示例:将图像转为灰度图
- function toGrayExample() {
- printl("=== toGray 方法示例 ===");
- try {
- // 截图获取图像
- const grayImage = screen.screenShotFull();
- const grayMat = grayImage.getMat();
-
- // 转换为灰度图
- opencv.toGray(grayMat);
- printl("图像已转为灰度图");
-
- // 保存处理后的图像(可选)
- // grayImage.save("/sdcard/gray_image.png");
-
- // 释放资源
- grayMat.close();
- grayImage.close();
- } catch (error) {
- printl("toGray执行出错: " + error.message);
- }
- }
- // 调用示例
- // toGrayExample(); // 取消注释以运行示例
- // 第六个方法:📌extractRegion - 图像裁切(从大图中截图裁切)
- /*
- 类别 详情说明
- 方法功能 按百分比区域裁切图像,可选择仅保留裁切部分或保留原图大小(其他区域变白)
- 方法签名 void opencv.extractRegion (Mat sourceImage, Double[] roiPercent, Boolean iscut)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat sourceImage:待裁切的原始图像(Mat对象)
- - Double[] roiPercent:裁切区域百分比数组,格式为 [x, y, width, height]
- - Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
- */
- // 示例:裁切图像中间50%区域并仅保留裁切部分
- function extractRegionExample() {
- printl("=== extractRegion 方法示例 ===");
- try {
- // 截图获取图像
- const extractImage = screen.screenShotFull();
- const extractMat = extractImage.getMat();
-
- // 裁切图像中间50%区域并仅保留裁切部分
- opencv.extractRegion(extractMat, [0.25, 0.25, 0.5, 0.5], true);
- printl("图像已裁切");
-
- // 保存处理后的图像(可选)
- // extractImage.save("/sdcard/cropped_image.png");
-
- // 释放资源
- extractMat.close();
- extractImage.close();
- } catch (error) {
- printl("extractRegion执行出错: " + error.message);
- }
- }
- // 调用示例
- // extractRegionExample(); // 取消注释以运行示例
- // 第七个方法:📌threshold - 图像二值化处理
- /*
- 类别 详情说明
- 方法功能 将图像转换为黑白二值图(像素值在[min, max]区间外为黑色,区间内为白色)
- 方法签名 void opencv.threshold (Mat src, Int32 min, Int32 max)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待二值化的原始图像(Mat对象)
- - Int32 min:二值化最小阈值(0-255)
- - Int32 max:二值化最大阈值(0-255)
- */
- // 示例:截屏并进行二值化处理(含后续流程)
- function thresholdExample() {
- printl("=== threshold 方法示例 ===");
- try {
- // 截图获取图像
- const binImg = screen.screenShotFull();
- const binMat = binImg.getMat();
-
- // 进行二值化处理,阈值区间50-200
- opencv.threshold(binMat, 50, 200);
- printl("图像已二值化处理");
-
- // 转Image并OCR识别
- const binImg2 = new Image();
- binImg2.readMat(binMat);
- var ocr2 = binImg2.ocr(0, 0, 1, 1);
- if(ocr2!=null){
- printl(ocr2.getAllString());
- } else {
- printl("二值化后OCR识别失败");
- }
-
- // 保存处理后的图像(可选)
- // binImg.save("/sdcard/binary_image.png");
-
- // 释放内存
- binMat.close();
- binImg.close();
- binImg2.close();
- } catch (error) {
- printl("threshold执行出错: " + error.message);
- }
- }
- // 调用示例
- // thresholdExample(); // 取消注释以运行示例
- // 第八个方法:📌invertColor - 图像颜色翻转(反色处理)
- /*
- 类别 详情说明
- 方法功能 对图像进行颜色翻转,将每个像素的RGB值反转(如白色→黑色、红色→青色等)
- 方法签名 void opencv.invertColor (Mat src)
- 返回值 void(无返回值,直接修改输入的Mat对象)
- 参数 - Mat src:待颜色翻转的原始图像(Mat对象)
- */
- // 示例:翻转图像颜色
- function invertColorExample() {
- printl("=== invertColor 方法示例 ===");
- try {
- // 截图获取图像
- const invertImage = screen.screenShotFull();
- const invertMat = invertImage.getMat();
-
- // 翻转图像颜色
- opencv.invertColor(invertMat);
- printl("颜色已翻转的图像");
-
- // 保存处理后的图像(可选)
- // invertImage.save("/sdcard/inverted_image.png");
-
- // 释放资源
- invertMat.close();
- invertImage.close();
- } catch (error) {
- printl("invertColor执行出错: " + error.message);
- }
- }
- // 调用示例
- // invertColorExample(); // 取消注释以运行示例
- // ========================== 实际可用的完整示例 ==========================
- /**
- * 实际可用的OpenCV图像处理示例
- * 演示完整的图像处理流程
- */
- async function practicalOpenCVExample() {
- printl("=== OpenCV完整处理流程示例 ===");
-
- try {
- // 1. 全屏截图
- printl("1. 执行全屏截图");
- const screenshot = screen.screenShotFull();
- const mat = screenshot.getMat();
- printl(" 截图完成,图像尺寸: " + mat.width + "x" + mat.height);
-
- // 2. 图像预处理 - 转为灰度图
- printl("2. 图像转为灰度图");
- opencv.toGray(mat);
-
- // 3. 使用cv文件查找图像
- printl("3. 使用cv文件查找图像");
- const findResults = opencv.findImagesEx("图色961575.cv");
- if (findResults && findResults.length > 0) {
- printl(" 找到 " + findResults.length + " 个匹配目标");
- const firstResult = findResults[0];
- printl(" 第一个匹配目标相似度: " + firstResult.score());
- printl(" 位置信息: " + firstResult.getRect().toString());
- } else {
- printl(" 未找到匹配目标");
- }
-
- // 4. 使用cv文件进行OCR识别
- printl("4. 使用cv文件进行OCR识别");
- var ocrResult=opencv.OCREx('图色995593.cv');
- if(ocrResult!=null){
- printl(ocrResult.getAllString());
- } else {
- printl("OCR识别失败或未识别到文字");
- }
-
- // 5. 图像二值化处理
- printl("5. 图像二值化处理");
- opencv.threshold(mat, 100, 200);
- printl(" 二值化处理完成");
-
- // 6. 颜色翻转
- printl("6. 图像颜色翻转");
- opencv.invertColor(mat);
- printl(" 颜色翻转完成");
-
- // 7. 裁切图像
- printl("7. 裁切图像中间区域");
- opencv.extractRegion(mat, [0.25, 0.25, 0.5, 0.5], true);
- printl(" 图像裁切完成");
-
- // 释放资源
- mat.close();
- screenshot.close();
- printl("8. 资源释放完成");
-
- } catch (error) {
- printl("执行过程中发生错误: " + error.message);
- }
-
- printl("=== OpenCV图像处理示例结束 ===");
- }
- // 运行实际示例
- practicalOpenCVExample(); // 取消注释以运行示例
- // ... existing code ...
复制代码
| |  | |  |
|