| |  |  |  |  |  | 
AIWROK软件图像视觉处理[opencv]小结3
                        ![AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具  AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具](static/image/common/none.gif)  ![AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具  AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具](static/image/common/none.gif)  ![AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具  AIWROK软件图像视觉处理[opencv]小结3 群发软件发帖工具](static/image/common/none.gif)  复制代码// // 🍎交流QQ群711841924群一,苹果内测群,528816639
// 方法1:findImageOneSift:找图(SIFT 算法)
/**
 * 功能描述:根据多个颜色点在图像中查找匹配区域,返回所有匹配的检测对象数组
 * 函数声明:detect[] findMultiColor(Mat arg0, String arg1, String[] arg2, int arg3, int arg4, float[] arg5, double arg6)
 * 返回值:detect[]
 * 参数:
 *   Mat arg0:图片
 *   String arg1:基点
 *   String[] arg2:多色
 *   int arg3:偏色阈值
 *   int arg4:偏移阈值
 *   float[] arg5:区域
 *   double arg6:相似度
 * 案例:
 */
// 简单SIFT图像查找示例
function simpleSiftExample() {
    printl("开始简单的SIFT图像查找");
    
    try {
        // 截取屏幕作为大图
        var bigMat = screen.screenShot(900, 1600, 100).getMat();
        // 截取小区域作为小图
        var smallMat = screen.screenShot(300, 300, 100).getMat();
        
        // 注意:下面的方法调用导致了错误,可能是因为参数类型不匹配
        // Can't find method com.autoapp.autoapp.Classes.opencv.OpenvCv.findImageOneSift(org.opencv.core.Mat,org.opencv.core.Mat,number,number,object)
        // 这表明方法签名可能与我们假设的不同
        // var result = opencv.findImageOneSift(bigMat, smallMat, 60, 50, [0, 0, 1, 1]);
        
        printl("SIFT查找功能暂时不可用,请检查方法签名");
        
        // 释放资源
        bigMat = null;
        smallMat = null;
        // result = null;
    } catch (e) {
        printl("SIFT查找错误: " + String(e));
    }
}
// 简单多点找色示例
function simpleMultiColorExample() {
    printl("开始简单的多点找色");
    
    try {
        // 截取屏幕
        var mat = screen.screenShot(900, 1600, 100).getMat();
        
        // 基点和颜色点(示例值,实际使用时需要根据图像调整)
        var basePoint = "100,100,#FFFFFF";
        var colorPoints = ["120,100,#CCCCCC"];
        
        // 执行多点找色
        var results = opencv.findMultiColor(mat, basePoint, colorPoints, 2, 5, [0, 0, 1, 1], 0.5);
        
        if (results != null && results.length > 0) {
            printl("找到 " + results.length + " 个匹配点");
        } else {
            printl("未找到匹配点");
        }
        
        // 释放资源
        mat = null;
        results = null;
    } catch (e) {
        printl("多点找色错误: " + String(e));
    }
}
// 执行示例
simpleMultiColorExample();
// 方法2:findImagesEx:cv 文件找图
/**
 * 功能描述:cv 文件找图
 * 函数声明:detect[] findImagesEx(String arg0)
 * 返回值:detect[]
 * 参数:String arg0:cv 文件名
 * 案例:
 */
// 找图返回目标数组
var detects = opencv.findImagesEx('图色564976.cv');
if (detects != null) {
    printl(detects);
    detects[0].click();
}
// 方法3:findMultiColor:找色
/**
 * 功能描述:根据多个颜色点在图像中查找匹配区域,返回所有匹配的检测对象数组
 * 函数声明:detect[] findMultiColor(Mat arg0, String arg1, String[] arg2, int arg3, int arg4, float[] arg5, double arg6)
 * 返回值:detect[]
 * 参数:
 *   Mat arg0:图片
 *   String arg1:基点
 *   String[] arg2:多色
 *   int arg3:偏色阈值
 *   int arg4:偏移阈值
 *   float[] arg5:区域
 *   double arg6:相似度
 * 案例:
 */
var result: detect[] = 图色850610();
if (result != null) {
    result[0].click();
} else {
    print.err('查找图色850610失败')
}
function 图色850610() {
    // 截屏并转成mat格式
    var mat = screen.screenShot(900, 1600, 100).getMat();
    // 找色
    return opencv.findMultiColor(mat, '546,325,#51752F', ['552,355,#429D60', '534,367,#63FA87'], 2, 5, [0, 0, 1, 1], 0.95)
}
// 方法4:findMultiColorEx:cv 文件多点找色
/**
 * 功能描述:cv 文件多点找色
 * 函数声明:detect[] findMultiColorEx(String arg0)
 * 返回值:detect[]
 * 参数:String arg0:cv 文件名
 * 案例:
 */
// 找色返回目标数组
var detects = opencv.findMultiColorEx('图色850610.cv');
if (detects != null) {
    printl(detects);
    detects[0].click();
}
// 方法5:gaussianBlur:高斯滤波
/**
 * 功能描述:高斯滤波可以平滑图像边缘
 * 函数声明:Mat gaussianBlur(Mat arg0, int arg1)
 * 返回值:Mat
 * 参数:
 *   Mat arg0:图像
 *   int arg1:卷积核
 * 案例:
 */
let mat: Mat = 图色770562();
printl(mat);
function 图色770562() {
    // 截屏并转成mat格式
    var mat = screen.screenShot(900, 1600, 100).getMat();
    // 高斯滤波
    opencv.gaussianBlur(mat, 5)
    return mat;
}
// 方法6:getAllShap:获取所有 Shape
/**
 * 功能描述:获取所有 Shap
 * 函数声明:ArrayList getAllShap(Mat arg0)
 * 返回值:ArrayList
 * 参数:Mat arg0:输入图像
 * 案例:
 */
// 获取所有Shape示例
// 函数声明: ArrayList getAllShap(Mat arg0)
// 参数: Mat arg0 - 输入图像
// 返回值: ArrayList - 包含所有Shape的列表
function getAllShapExample() {
    printl("开始执行获取所有Shape示例");
    
    try {
        // 截取屏幕图像
        var screenshot = screen.screenShot(900, 1600, 100);
        var mat = screenshot.getMat();
        printl("截图尺寸: " + mat.width() + "x" + mat.height());
        
        // 尝试对图像进行预处理以确保格式正确
        // 先转换为灰度图像,这通常会生成CV_8UC1格式
        var grayMat = new Mat();
        opencv.cvtColor(mat, grayMat, 6); // 6 表示 COLOR_RGB2GRAY
        
        // 调用getAllShap函数获取所有Shape
        var shapes = opencv.getAllShap(grayMat);
        
        if (shapes != null) {
            printl("成功获取到 " + shapes.size() + " 个Shape");
            
            // 限制输出前10个Shape以避免日志过多
            var outputCount = Math.min(shapes.size(), 10);
            for (var i = 0; i < outputCount; i++) {
                var shape = shapes.get(i);
                printl("Shape " + (i+1) + ": " + shape);
            }
            
            if (shapes.size() > 10) {
                printl("... 还有 " + (shapes.size() - 10) + " 个Shape未显示");
            }
        } else {
            printl("未获取到任何Shape");
        }
        
        // 释放资源
        mat = null;
        grayMat = null;
        screenshot = null;
        shapes = null;
        
    } catch (e) {
        printl("执行获取所有Shape时发生错误: " + String(e));
    }
    
    printl("获取所有Shape示例执行完毕");
}
// 执行示例
getAllShapExample();
// 方法7:getContours:获取轮廓图
/**
 * 功能描述:获取轮廓图
 * 函数声明:Mat getContours(Mat arg0)
 * 返回值:Mat
 * 参数:Mat arg0:输入图像
 * 案例:
 */
// 简单获取轮廓图示例
// 函数声明: Mat getContours(Mat arg0)
// 参数: Mat arg0 - 输入图像
// 返回值: Mat - 包含轮廓的Mat对象
function simpleGetContoursExample() {
    printl("开始执行简单获取轮廓图示例");
    
    // 截取屏幕图像
    var screenshot = screen.screenShot(900, 1600, 100);
    var mat = screenshot.getMat();
    printl("截图尺寸: " + mat.width() + "x" + mat.height());
    
    // 尝试对图像进行预处理以确保格式正确
    // 先转换为灰度图像,这通常会生成CV_8UC1格式
    var grayMat = new Mat();
    opencv.cvtColor(mat, grayMat, 6); // 6 表示 COLOR_RGB2GRAY
    
    // 调用getContours函数获取轮廓
    var contours = opencv.getContours(grayMat);
    
    if (contours != null) {
        printl("成功获取到轮廓,轮廓数量: " + contours.size());
        
        // 显示前5个轮廓的详细信息
        var showCount = Math.min(contours.size(), 5);
        for (var i = 0; i < showCount; i++) {
            var contour = contours.get(i);
            printl("轮廓 " + (i+1) + ": 长度=" + contour.length + " 点数=" + contour.points.length);
        }
    } else {
        printl("未获取到任何轮廓");
    }
    
    // 释放资源
    mat = null;
    grayMat = null;
    screenshot = null;
    contours = null;
    
    
    printl("简单获取轮廓图示例执行完毕");
}
// 执行示例
simpleGetContoursExample();
方法1:findImageOneSift:找图(SIFT 算法)   | 类别 | 详情 |  | 功能描述 | 根据多个颜色点在图像中查找匹配区域,返回所有匹配的检测对象数组 |  | 函数声明 | detect[] findMultiColor(Mat arg0, String arg1, String[] arg2, int arg3, int arg4, float[] arg5, double arg6) |  | 返回值 | detect[] |  | 参数 | Mat arg0 :图片String arg1 :基点String[] arg2 :多色int arg3 :偏色阈值int arg4 :偏移阈值float[] arg5 :区域double arg6 :相似度 |  | 案例 | // 简单SIFT图像查找示例 function simpleSiftExample() {     printl("开始简单的SIFT图像查找");          try {         // 截取屏幕作为大图         var bigMat = screen.screenShot(900, 1600, 100).getMat();         // 截取小区域作为小图         var smallMat = screen.screenShot(300, 300, 100).getMat();                  // 注意:下面的方法调用导致了错误,可能是因为参数类型不匹配         // Can't find method com.autoapp.autoapp.Classes.opencv.OpenvCv.findImageOneSift(org.opencv.core.Mat,org.opencv.core.Mat,number,number,object)         // 这表明方法签名可能与我们假设的不同         // var result = opencv.findImageOneSift(bigMat, smallMat, 60, 50, [0, 0, 1, 1]);                  printl("SIFT查找功能暂时不可用,请检查方法签名");                  // 释放资源         bigMat = null;         smallMat = null;         // result = null;     } catch (e) {         printl("SIFT查找错误: " + String(e));     } } // 简单多点找色示例 function simpleMultiColorExample() {     printl("开始简单的多点找色");          try {         // 截取屏幕         var mat = screen.screenShot(900, 1600, 100).getMat();                  // 基点和颜色点(示例值,实际使用时需要根据图像调整)         var basePoint = "100,100,#FFFFFF";         var colorPoints = ["120,100,#CCCCCC"];                  // 执行多点找色         var results = opencv.findMultiColor(mat, basePoint, colorPoints, 2, 5, [0, 0, 1, 1], 0.5);                  if (results != null && results.length > 0) {             printl("找到 " + results.length + " 个匹配点");         } else {             printl("未找到匹配点");         }                  // 释放资源         mat = null;         results = null;     } catch (e) {         printl("多点找色错误: " + String(e));     } } // 执行示例 simpleMultiColorExample(); | 
 方法2:findImagesEx:cv 文件找图   | 类别 | 详情 |  | 功能描述 | cv 文件找图 |  | 函数声明 | detect[] findImagesEx(String arg0) |  | 返回值 | detect[] |  | 参数 | String arg0 :cv 文件名 |  | 案例 | //找图返回目标数组var detects=opencv.findImagesEx('图色564976.cv');
 if(detects!=null){
 printl(detects);
 detects[0].click();
 }
 | 
 方法3:findMultiColor:找色   | 类别
 | 详情 |  | 功能描述 | 根据多个颜色点在图像中查找匹配区域,返回所有匹配的检测对象数组 |  | 函数声明 | detect[] findMultiColor(Mat arg0, String arg1, String[] arg2, int arg3, int arg4, float[] arg5, double arg6) |  | 返回值 | detect[] |  | 参数 | Mat arg0 :图片String arg1 :基点String[] arg2 :多色int arg3 :偏色阈值int arg4 :偏移阈值float[] arg5 :区域double arg6 :相似度 |  | 案例 | var result:detect[]=图色850610(); if(result!=null){    result[0].click();     }else{    print.err('查找图色850610失败') }              function 图色850610(){    //截屏并转成mat格式    var mat=screen.screenShot(900,1600,100).getMat();   //找色   return opencv.findMultiColor(mat,'546,325,#51752F',['552,355,#429D60','534,367,#63FA87'],2,5,[0,0,1,1],0.95) } | 
 方法4:findMultiColorEx:cv 文件多点找色   | 类别 | 详情 |  | 功能描述 | cv 文件多点找色 |  | 函数声明 | detect[] findMultiColorEx(String arg0) |  | 返回值 | detect[] |  | 参数 | String arg0 :cv 文件名 |  | 案例 | //找色返回目标数组var detects=opencv.findMultiColorEx('图色850610.cv');
 if(detects!=null){
 printl(detects);
 detects[0].click();
 }
 | 
 方法5:gaussianBlur:高斯滤波   | 类别 | 详情 |  | 功能描述 | 高斯滤波可以平滑图像边缘 |  | 函数声明 | Mat gaussianBlur(Mat arg0, int arg1) |  | 返回值 | Mat |  | 参数 | Mat arg0 :图像int arg1 :卷积核 |  | 案例 | let mat:Mat=图色770562();printl(mat);
 
 
 
 function 图色770562(){
 //截屏并转成mat格式
 var mat=screen.screenShot(900,1600,100).getMat();
 
 //高斯滤波
 opencv.gaussianBlur(mat,5)
 return mat;
 
 }
 | 
 方法6:getAllShap:获取所有 Shape   | 类别 | 详情 |  | 功能描述 | 获取所有 Shap |  | 函数声明 | ArrayList getAllShap(Mat arg0) |  | 返回值 | ArrayList |  | 参数 | Mat arg0 : |  | 案例 | // 获取所有Shape示例 // 函数声明: ArrayList getAllShap(Mat arg0) // 参数: Mat arg0 - 输入图像 // 返回值: ArrayList - 包含所有Shape的列表 function getAllShapExample() {     printl("开始执行获取所有Shape示例");          try {         // 截取屏幕图像         var screenshot = screen.screenShot(900, 1600, 100);         var mat = screenshot.getMat();         printl("截图尺寸: " + mat.width() + "x" + mat.height());                  // 尝试对图像进行预处理以确保格式正确         // 先转换为灰度图像,这通常会生成CV_8UC1格式         var grayMat = new Mat();         opencv.cvtColor(mat, grayMat, 6); // 6 表示 COLOR_RGB2GRAY                  // 调用getAllShap函数获取所有Shape         var shapes = opencv.getAllShap(grayMat);                  if (shapes != null) {             printl("成功获取到 " + shapes.size() + " 个Shape");                          // 限制输出前10个Shape以避免日志过多             var outputCount = Math.min(shapes.size(), 10);             for (var i = 0; i < outputCount; i++) {                 var shape = shapes.get(i);                 printl("Shape " + (i+1) + ": " + shape);             }                          if (shapes.size() > 10) {                 printl("... 还有 " + (shapes.size() - 10) + " 个Shape未显示");             }         } else {             printl("未获取到任何Shape");         }                  // 释放资源         mat = null;         grayMat = null;         screenshot = null;         shapes = null;              } catch (e) {         printl("执行获取所有Shape时发生错误: " + String(e));     }          printl("获取所有Shape示例执行完毕"); } // 执行示例 getAllShapExample(); | 
 方法7:getContours:获取轮廓图   | 类别 | 详情 |  | 功能描述 | 获取轮廓图 |  | 函数声明 | Mat getContours(Mat arg0) |  | 返回值 | Mat |  | 参数 | Mat arg0 : |  | 案例 | // 简单获取轮廓图示例 // 函数声明: Mat getContours(Mat arg0) // 参数: Mat arg0 - 输入图像 // 返回值: Mat - 包含轮廓的Mat对象 function simpleGetContoursExample() {     printl("开始执行简单获取轮廓图示例");          // 截取屏幕图像     var screenshot = screen.screenShot(900, 1600, 100);     var mat = screenshot.getMat();     printl("截图尺寸: " + mat.width() + "x" + mat.height());          // 尝试对图像进行预处理以确保格式正确     // 先转换为灰度图像,这通常会生成CV_8UC1格式     var grayMat = new Mat();     opencv.cvtColor(mat, grayMat, 6); // 6 表示 COLOR_RGB2GRAY          // 调用getContours函数获取轮廓     var contours = opencv.getContours(grayMat);          if (contours != null) {         printl("成功获取到轮廓,轮廓数量: " + contours.size());                  // 显示前5个轮廓的详细信息         var showCount = Math.min(contours.size(), 5);         for (var i = 0; i < showCount; i++) {             var contour = contours.get(i);             printl("轮廓 " + (i+1) + ": 长度=" + contour.length + " 点数=" + contour.points.length);         }     } else {         printl("未获取到任何轮廓");     }          // 释放资源     mat = null;     grayMat = null;     screenshot = null;     contours = null;               printl("简单获取轮廓图示例执行完毕"); } // 执行示例 simpleGetContoursExample(); | 
 
 |  |  |  |  |  | 
 |