| |  |  |  |  |  | AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
                        ![AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 群发软件发帖工具  AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 群发软件发帖工具](static/image/common/none.gif)  ![AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 群发软件发帖工具  AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 群发软件发帖工具](static/image/common/none.gif)  方法 1:cv 文件找图(模版匹配 cv 找图)复制代码/*
🍎交流 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);
方法 2:cv 文件 OCR(模版匹配 OCR)| 类别 | 内容 |  | 主题 | cv 文件找图、模版匹配 cv 找图 |  | 方法 | Detect[] findImagesEx(String cvFile) |  | 返回值 | Detect[] |  | 参数 | String cvFile : cv 文件 cv 文件 |  | 案例 | opencv.findImagesEx("") | 
 方法 3:模版匹配(通过模版匹配找到目标对象)| 类别 | 内容 |  | 主题 | cv 文件 OCR、模版匹配 OCR |  | 方法 | OcrResult OCREx(String cvFile) |  | 返回值 | OcrResult |  | 参数 | String cvFile : cv 文件 cv 文件 |  | 案例 | opencv.OCREx("") | 
 方法 4:找多图| 类别 | 内容 |  | 主题 | 模版匹配;通过模版匹配找到目标对象 |  | 方法 | Detect[] templateMatch(Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best) |  | 返回值 | Detect[] |  | 参数 | Mat mat : mat 类型图片String[] templates
 : 模版图片数组Double threshold
 : 阈值 0-1Double[] roi
 : 区域数组[0,0,1,1] Boolean best
 : 是否只返回最优解 |  | 案例 | opencv.templateMatch(Mat, String[], Double, Double[], true) | 
 方法 5:转灰度图(图像转灰度图)| 类别 | 内容 |  | 主题 | 找多图 |  | 说明 | 找图,可设置多张相似图片;找图成功返回目标数组,失败返回null |  | 方法 | Detect[] findImages(String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects) |  | 返回值 | Detect[] |  | 参数 | String[] images : 图片数组Double threshold
 : 相似度 0-1Int32 timeOut
 : 超时时间(毫秒,超时未找到则退出)Int32 quality
 : 屏幕截图质量(0 标清、1 高清、2 超清)Double[] rects
 : 百分比区域 |  | 案例 | opencv.findImages(String[], Double, Int32, Int32, Double[]) | 
 方法 6:裁切图片(从大图中截图裁切图片)| 类别 | 内容 |  | 主题 | 转灰度图 |  | 说明 | 图像转灰度图 |  | 方法 | Void toGray(Mat src) |  | 返回值 | Void |  | 参数 | Mat src : mat 图像 mat 图像 |  | 案例 | opencv.toGray(Mat) | 
 方法 7:二值化| 类别 | 内容 |  | 主题 | 裁切图片 |  | 说明 | 从大图中截图裁切图片 |  | 方法 | Void extractRegion(Mat sourceImage, Double[] roiPercent, Boolean iscut) |  | 返回值 | Void |  | 参数 | Mat sourceImage : mat 图像 mat 图像Double[] roiPercent
 : 裁切区域百分数数组Boolean iscut
 : true 只保留裁切部分,false 图片大小不变、其他区域变白 |  | 案例 | opencv.extractRegion(Mat, Double[], true) | 
 方法 8:颜色翻转| 类别 | 内容 |  | 主题 | 二值化 |  | 方法 | 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(); | 
 | 类别 | 内容 |  | 主题 | 颜色翻转 |  | 方法 | 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 ...
 
 |  |  |  |  |  | 
 |