AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
AIWROK软件苹果IOS系统图色视觉方法小结/*
🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
🍎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:匹配区域百分比数组,格式为 ,默认全图
- Boolean best:是否只返回最优匹配结果(true则只返回最佳匹配,false返回所有符合阈值的结果)
*/
// 示例:多模板匹配指定区域
const templates = ["./tpl1.png", "./tpl2.png"];
const matchResults = opencv.templateMatch(mat, templates, 0.8, , 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:查找区域百分比数组,格式为 ,默认全图
*/
// 示例:多图查找并设置超时
const targetImages = ["./img1.png", "./img2.png"];
const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 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:裁切区域百分比数组,格式为
- Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
*/
// 示例:裁切图像中间50%区域并仅保留裁切部分
opencv.extractRegion(mat, , true);
print.log("图像已裁切:", mat);
// 第七个方法:📌threshold - 图像二值化处理
/*
类别 详情说明
方法功能 将图像转换为黑白二值图(像素值在区间外为黑色,区间内为白色)
方法签名 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: 区域数组
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 类 方法小结
// 第一个方法:📌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;
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:匹配区域百分比数组,格式为 ,默认全图
- 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, , true);
printl("模板匹配结果:", matchResults);
if (matchResults && matchResults.length > 0) {
printl("找到 " + matchResults.length + " 个匹配目标");
for (let i = 0; i < matchResults.length; i++) {
let result = matchResults;
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:查找区域百分比数组,格式为 ,默认全图
*/
// 示例:多图查找并设置超时
function findImagesExample() {
printl("=== findImages 方法示例 ===");
try {
// 定义要查找的图片路径数组(请根据实际情况修改路径)
const targetImages = ["图色961575.cv"];
// 查找图片,设置阈值0.7,超时时间3000ms,高清质量,全图查找
const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, );
if (multiFindResults) {
printl("多图查找成功,结果:", multiFindResults);
printl("找到 " + multiFindResults.length + " 个匹配目标");
for (let i = 0; i < multiFindResults.length; i++) {
let result = multiFindResults;
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:裁切区域百分比数组,格式为
- Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
*/
// 示例:裁切图像中间50%区域并仅保留裁切部分
function extractRegionExample() {
printl("=== extractRegion 方法示例 ===");
try {
// 截图获取图像
const extractImage = screen.screenShotFull();
const extractMat = extractImage.getMat();
// 裁切图像中间50%区域并仅保留裁切部分
opencv.extractRegion(extractMat, , true);
printl("图像已裁切");
// 保存处理后的图像(可选)
// extractImage.save("/sdcard/cropped_image.png");
// 释放资源
extractMat.close();
extractImage.close();
} catch (error) {
printl("extractRegion执行出错: " + error.message);
}
}
// 调用示例
// extractRegionExample(); // 取消注释以运行示例
// 第七个方法:📌threshold - 图像二值化处理
/*
类别 详情说明
方法功能 将图像转换为黑白二值图(像素值在区间外为黑色,区间内为白色)
方法签名 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;
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, , true);
printl(" 图像裁切完成");
// 释放资源
mat.close();
screenshot.close();
printl("8. 资源释放完成");
} catch (error) {
printl("执行过程中发生错误: " + error.message);
}
printl("=== OpenCV图像处理示例结束 ===");
}
// 运行实际示例
practicalOpenCVExample(); // 取消注释以运行示例
// ... existing code ...
页:
[1]