B2B网络软件

标题: AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 [打印本页]

作者: YYPOST群发软件    时间: 13 小时前
标题: AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
AIWROK软件苹果IOS系统图色视觉[opencv]方法小结
AIWROK软件苹果IOS系统图色视觉[opencv]方法小结 B2B网络软件

  1. /*
  2. 🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
  3. 🍎OpenCV 图像处理方法小结
  4. */

  5. //🍎OpenCV 类 [opencv] 方法小结

  6. // 第一个方法:📌findImagesEx - cv文件找图(模板匹配cv找图)
  7. /*
  8. 类别 详情说明
  9. 方法功能 基于cv文件进行模板匹配找图,返回匹配到的目标数组
  10. 方法签名 Detect[] opencv.findImagesEx (String cvFile)
  11. 返回值 Detect[](匹配到的目标数组,每个元素包含位置、相似度等信息)
  12. 参数 - String cvFile:cv格式的模板文件路径
  13. */
  14. // 示例:基于cv文件找图
  15. let findResults = opencv.findImagesEx("./template.cv");
  16. print.log("cv文件找图结果:", findResults);


  17. // 第二个方法:📌OCREx - cv文件OCR(模板匹配OCR)
  18. /*
  19. 类别 详情说明
  20. 方法功能 基于cv文件模板进行文字识别,返回OCR识别结果
  21. 方法签名 OcrResult opencv.OCREx (String cvFile)
  22. 返回值 OcrResult(OCR识别结果对象,包含识别到的文字及位置信息)
  23. 参数 - String cvFile:cv格式的OCR模板文件路径
  24. */
  25. // 示例:基于cv文件进行OCR识别
  26. let ocrResult = opencv.OCREx("./textTemplate.cv");
  27. print.log("OCR识别文字:", ocrResult.text);


  28. // 第三个方法:📌templateMatch - 多模板匹配查找目标对象
  29. /*
  30. 类别 详情说明
  31. 方法功能 基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等
  32. 方法签名 Detect[] opencv.templateMatch (Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best)
  33. 返回值 Detect[](匹配到的目标数组)
  34. 参数 - Mat mat:待匹配的原始图像(Mat对象)
  35. - String[] templates:模板图片路径数组
  36. - Double threshold:匹配阈值(0-1,值越高匹配越严格)
  37. - Double[] roi:匹配区域百分比数组,格式为 [x, y, width, height],默认全图 [0,0,1,1]
  38. - Boolean best:是否只返回最优匹配结果(true则只返回最佳匹配,false返回所有符合阈值的结果)
  39. */
  40. // 示例:多模板匹配指定区域
  41. const templates = ["./tpl1.png", "./tpl2.png"];
  42. const matchResults = opencv.templateMatch(mat, templates, 0.8, [0.2, 0.2, 0.6, 0.6], true);
  43. print.log("模板匹配结果:", matchResults);


  44. // 第四个方法:📌findImages - 多图查找(支持超时和质量设置)
  45. /*
  46. 类别 详情说明
  47. 方法功能 同时查找多张相似图片,超时未找到则返回null;可设置截图质量、超时时间等
  48. 方法签名 Detect[]|null opencv.findImages (String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects)
  49. 返回值 Detect[]|null(匹配成功返回目标数组,失败返回null)
  50. 参数 - String[] images:待查找的图片路径数组
  51. - Double threshold:相似度阈值(0-1)
  52. - Int32 timeOut:超时时间(毫秒,超过该时间未找到则返回null)
  53. - Int32 quality:屏幕截图质量(0:标清,1:高清,2:超清)
  54. - Double[] rects:查找区域百分比数组,格式为 [x, y, width, height],默认全图
  55. */
  56. // 示例:多图查找并设置超时
  57. const targetImages = ["./img1.png", "./img2.png"];
  58. const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
  59. if (multiFindResults) {
  60.   print.log("多图查找成功,结果:", multiFindResults);
  61. } else {
  62.   print.err("多图查找超时或失败");
  63. }


  64. // 第五个方法:📌toGray - 图像转灰度图
  65. /*
  66. 类别 详情说明
  67. 方法功能 将输入的Mat图像转换为灰度图(直接修改原始Mat对象)
  68. 方法签名 void opencv.toGray (Mat src)
  69. 返回值 void(无返回值,直接修改输入的Mat对象)
  70. 参数 - Mat src:待转换的原始图像(Mat对象)
  71. */
  72. // 示例:将图像转为灰度图
  73. const grayMat = image.getMat(); // 假设从image对象获取Mat
  74. opencv.toGray(grayMat);
  75. print.log("图像已转为灰度图:", grayMat);


  76. // 第六个方法:📌extractRegion - 图像裁切(从大图中截图裁切)
  77. /*
  78. 类别 详情说明
  79. 方法功能 按百分比区域裁切图像,可选择仅保留裁切部分或保留原图大小(其他区域变白)
  80. 方法签名 void opencv.extractRegion (Mat sourceImage, Double[] roiPercent, Boolean iscut)
  81. 返回值 void(无返回值,直接修改输入的Mat对象)
  82. 参数 - Mat sourceImage:待裁切的原始图像(Mat对象)
  83. - Double[] roiPercent:裁切区域百分比数组,格式为 [x, y, width, height]
  84. - Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
  85. */
  86. // 示例:裁切图像中间50%区域并仅保留裁切部分
  87. opencv.extractRegion(mat, [0.25, 0.25, 0.5, 0.5], true);
  88. print.log("图像已裁切:", mat);


  89. // 第七个方法:📌threshold - 图像二值化处理
  90. /*
  91. 类别 详情说明
  92. 方法功能 将图像转换为黑白二值图(像素值在[min, max]区间外为黑色,区间内为白色)
  93. 方法签名 void opencv.threshold (Mat src, Int32 min, Int32 max)
  94. 返回值 void(无返回值,直接修改输入的Mat对象)
  95. 参数 - Mat src:待二值化的原始图像(Mat对象)
  96. - Int32 min:二值化最小阈值(0-255)
  97. - Int32 max:二值化最大阈值(0-255)
  98. */
  99. // 示例:截屏并进行二值化处理(含后续流程)
  100. const binImg = screen.screenShotFull();
  101. const binMat = binImg.getMat();
  102. opencv.threshold(binMat, 50, 200); // 阈值区间50-200

  103. // 转Image并OCR识别
  104. const binImg2 = new Image();
  105. binImg2.readMat(binMat);
  106. const ocrRes = binImg2.ocr(0, 0, 1, 1);
  107. print.log("二值化后OCR结果:", ocrRes);

  108. // 释放内存
  109. binMat.close();
  110. binImg.close();
  111. binImg2.close();


  112. // 第八个方法:📌invertColor - 图像颜色翻转(反色处理)
  113. /*
  114. 类别 详情说明
  115. 方法功能 对图像进行颜色翻转,将每个像素的RGB值反转(如白色→黑色、红色→青色等)
  116. 方法签名 void opencv.invertColor (Mat src)
  117. 返回值 void(无返回值,直接修改输入的Mat对象)
  118. 参数 - Mat src:待颜色翻转的原始图像(Mat对象)
  119. */
  120. // 示例:翻转图像颜色
  121. const invertMat = image.getMat();
  122. opencv.invertColor(invertMat);
  123. 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)
实战实例:
  1. // ... existing code ...

  2. /*
  3. 🍎交流 QQ 群 711841924 群一,苹果内测群,528816639
  4. 🍎OpenCV 图像处理方法小结
  5. */

  6. //🍎OpenCV 类 [opencv] 方法小结

  7. // 第一个方法:📌findImagesEx - cv文件找图(模板匹配cv找图)
  8. /*
  9. 类别 详情说明
  10. 方法功能 基于cv文件进行模板匹配找图,返回匹配到的目标数组
  11. 方法签名 Detect[] opencv.findImagesEx (String cvFile)
  12. 返回值 Detect[](匹配到的目标数组,每个元素包含位置、相似度等信息)
  13. 参数 - String cvFile:cv格式的模板文件路径
  14. */
  15. // 示例:基于cv文件找图
  16. function findImagesExExample() {
  17.     printl("=== findImagesEx 方法示例 ===");
  18.     try {
  19.         // 使用cv文件查找图像
  20.         let findResults = opencv.findImagesEx("图色961575.cv");
  21.         printl("cv文件找图结果:", findResults);
  22.         
  23.         if (findResults && findResults.length > 0) {
  24.             printl("找到 " + findResults.length + " 个匹配目标");
  25.             for (let i = 0; i < findResults.length; i++) {
  26.                 let result = findResults[i];
  27.                 printl("  目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
  28.             }
  29.         } else {
  30.             printl("未找到匹配目标");
  31.         }
  32.     } catch (error) {
  33.         printl("findImagesEx执行出错: " + error.message);
  34.     }
  35. }
  36. // 调用示例
  37. findImagesExExample();


  38. // 第二个方法:&#128204;OCREx - cv文件OCR(模板匹配OCR)
  39. /*
  40. 类别 详情说明
  41. 方法功能 基于cv文件模板进行文字识别,返回OCR识别结果
  42. 方法签名 OcrResult opencv.OCREx (String cvFile)
  43. 返回值 OcrResult(OCR识别结果对象,包含识别到的文字及位置信息)
  44. 参数 - String cvFile:cv格式的OCR模板文件路径
  45. */
  46. // 示例:基于cv文件进行OCR识别
  47. function ocrExExample() {
  48.     printl("=== OCREx 方法示例 ===");
  49.     try {
  50.         var ocr1=opencv.OCREx('图色995593.cv');
  51.         if(ocr1!=null){
  52.            printl(ocr1.getAllString());
  53.         } else {
  54.            printl("OCR识别失败或未识别到文字");
  55.         }
  56.     } catch (error) {
  57.         printl("OCREx执行出错: " + error.message);
  58.     }
  59. }
  60. // 调用示例
  61. ocrExExample();


  62. // 第三个方法:&#128204;templateMatch - 多模板匹配查找目标对象
  63. /*
  64. 类别 详情说明
  65. 方法功能 基于多个模板图片在指定图像中匹配目标,可设置匹配区域、阈值等
  66. 方法签名 Detect[] opencv.templateMatch (Mat mat, String[] templates, Double threshold, Double[] roi, Boolean best)
  67. 返回值 Detect[](匹配到的目标数组)
  68. 参数 - Mat mat:待匹配的原始图像(Mat对象)
  69. - String[] templates:模板图片路径数组
  70. - Double threshold:匹配阈值(0-1,值越高匹配越严格)
  71. - Double[] roi:匹配区域百分比数组,格式为 [x, y, width, height],默认全图 [0,0,1,1]
  72. - Boolean best:是否只返回最优匹配结果(true则只返回最佳匹配,false返回所有符合阈值的结果)
  73. */
  74. // 示例:多模板匹配指定区域
  75. function templateMatchExample() {
  76.     printl("=== templateMatch 方法示例 ===");
  77.     try {
  78.         // 截图获取图像
  79.         const screenshot = screen.screenShotFull();
  80.         const mat = screenshot.getMat();
  81.         
  82.         // 定义模板图片路径数组(请根据实际情况修改路径)
  83.         const templates = ["./template1.png", "./template2.png"];
  84.         
  85.         // 在指定区域进行模板匹配
  86.         const matchResults = opencv.templateMatch(mat, templates, 0.8, [0.2, 0.2, 0.6, 0.6], true);
  87.         printl("模板匹配结果:", matchResults);
  88.         
  89.         if (matchResults && matchResults.length > 0) {
  90.             printl("找到 " + matchResults.length + " 个匹配目标");
  91.             for (let i = 0; i < matchResults.length; i++) {
  92.                 let result = matchResults[i];
  93.                 printl("  目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
  94.             }
  95.         } else {
  96.             printl("未找到匹配目标");
  97.         }
  98.         
  99.         // 释放资源
  100.         mat.close();
  101.         screenshot.close();
  102.     } catch (error) {
  103.         printl("templateMatch执行出错: " + error.message);
  104.     }
  105. }
  106. // 调用示例
  107. // templateMatchExample(); // 取消注释以运行示例


  108. // 第四个方法:&#128204;findImages - 多图查找(支持超时和质量设置)
  109. /*
  110. 类别 详情说明
  111. 方法功能 同时查找多张相似图片,超时未找到则返回null;可设置截图质量、超时时间等
  112. 方法签名 Detect[]|null opencv.findImages (String[] images, Double threshold, Int32 timeOut, Int32 quality, Double[] rects)
  113. 返回值 Detect[]|null(匹配成功返回目标数组,失败返回null)
  114. 参数 - String[] images:待查找的图片路径数组
  115. - Double threshold:相似度阈值(0-1)
  116. - Int32 timeOut:超时时间(毫秒,超过该时间未找到则返回null)
  117. - Int32 quality:屏幕截图质量(0:标清,1:高清,2:超清)
  118. - Double[] rects:查找区域百分比数组,格式为 [x, y, width, height],默认全图
  119. */
  120. // 示例:多图查找并设置超时
  121. function findImagesExample() {
  122.     printl("=== findImages 方法示例 ===");
  123.     try {
  124.         // 定义要查找的图片路径数组(请根据实际情况修改路径)
  125.         const targetImages = ["图色961575.cv"];
  126.         
  127.         // 查找图片,设置阈值0.7,超时时间3000ms,高清质量,全图查找
  128.         const multiFindResults = opencv.findImages(targetImages, 0.7, 3000, 1, [0, 0, 1, 1]);
  129.         
  130.         if (multiFindResults) {
  131.             printl("多图查找成功,结果:", multiFindResults);
  132.             printl("找到 " + multiFindResults.length + " 个匹配目标");
  133.             for (let i = 0; i < multiFindResults.length; i++) {
  134.                 let result = multiFindResults[i];
  135.                 printl("  目标" + (i+1) + ": 相似度=" + result.score() + ", 位置=" + result.getRect().toString());
  136.             }
  137.         } else {
  138.             printl("多图查找超时或失败");
  139.         }
  140.     } catch (error) {
  141.         printl("findImages执行出错: " + error.message); // 修复:使用printl而不是print.err
  142.     }
  143. }
  144. // 调用示例
  145. findImagesExample();


  146. // 第五个方法:&#128204;toGray - 图像转灰度图
  147. /*
  148. 类别 详情说明
  149. 方法功能 将输入的Mat图像转换为灰度图(直接修改原始Mat对象)
  150. 方法签名 void opencv.toGray (Mat src)
  151. 返回值 void(无返回值,直接修改输入的Mat对象)
  152. 参数 - Mat src:待转换的原始图像(Mat对象)
  153. */
  154. // 示例:将图像转为灰度图
  155. function toGrayExample() {
  156.     printl("=== toGray 方法示例 ===");
  157.     try {
  158.         // 截图获取图像
  159.         const grayImage = screen.screenShotFull();
  160.         const grayMat = grayImage.getMat();
  161.         
  162.         // 转换为灰度图
  163.         opencv.toGray(grayMat);
  164.         printl("图像已转为灰度图");
  165.         
  166.         // 保存处理后的图像(可选)
  167.         // grayImage.save("/sdcard/gray_image.png");
  168.         
  169.         // 释放资源
  170.         grayMat.close();
  171.         grayImage.close();
  172.     } catch (error) {
  173.         printl("toGray执行出错: " + error.message);
  174.     }
  175. }
  176. // 调用示例
  177. // toGrayExample(); // 取消注释以运行示例


  178. // 第六个方法:&#128204;extractRegion - 图像裁切(从大图中截图裁切)
  179. /*
  180. 类别 详情说明
  181. 方法功能 按百分比区域裁切图像,可选择仅保留裁切部分或保留原图大小(其他区域变白)
  182. 方法签名 void opencv.extractRegion (Mat sourceImage, Double[] roiPercent, Boolean iscut)
  183. 返回值 void(无返回值,直接修改输入的Mat对象)
  184. 参数 - Mat sourceImage:待裁切的原始图像(Mat对象)
  185. - Double[] roiPercent:裁切区域百分比数组,格式为 [x, y, width, height]
  186. - Boolean iscut:裁切模式(true仅保留裁切区域;false保留原图大小,其他区域变白)
  187. */
  188. // 示例:裁切图像中间50%区域并仅保留裁切部分
  189. function extractRegionExample() {
  190.     printl("=== extractRegion 方法示例 ===");
  191.     try {
  192.         // 截图获取图像
  193.         const extractImage = screen.screenShotFull();
  194.         const extractMat = extractImage.getMat();
  195.         
  196.         // 裁切图像中间50%区域并仅保留裁切部分
  197.         opencv.extractRegion(extractMat, [0.25, 0.25, 0.5, 0.5], true);
  198.         printl("图像已裁切");
  199.         
  200.         // 保存处理后的图像(可选)
  201.         // extractImage.save("/sdcard/cropped_image.png");
  202.         
  203.         // 释放资源
  204.         extractMat.close();
  205.         extractImage.close();
  206.     } catch (error) {
  207.         printl("extractRegion执行出错: " + error.message);
  208.     }
  209. }
  210. // 调用示例
  211. // extractRegionExample(); // 取消注释以运行示例


  212. // 第七个方法:&#128204;threshold - 图像二值化处理
  213. /*
  214. 类别 详情说明
  215. 方法功能 将图像转换为黑白二值图(像素值在[min, max]区间外为黑色,区间内为白色)
  216. 方法签名 void opencv.threshold (Mat src, Int32 min, Int32 max)
  217. 返回值 void(无返回值,直接修改输入的Mat对象)
  218. 参数 - Mat src:待二值化的原始图像(Mat对象)
  219. - Int32 min:二值化最小阈值(0-255)
  220. - Int32 max:二值化最大阈值(0-255)
  221. */
  222. // 示例:截屏并进行二值化处理(含后续流程)
  223. function thresholdExample() {
  224.     printl("=== threshold 方法示例 ===");
  225.     try {
  226.         // 截图获取图像
  227.         const binImg = screen.screenShotFull();
  228.         const binMat = binImg.getMat();
  229.         
  230.         // 进行二值化处理,阈值区间50-200
  231.         opencv.threshold(binMat, 50, 200);
  232.         printl("图像已二值化处理");
  233.         
  234.         // 转Image并OCR识别
  235.         const binImg2 = new Image();
  236.         binImg2.readMat(binMat);
  237.         var ocr2 = binImg2.ocr(0, 0, 1, 1);
  238.         if(ocr2!=null){
  239.            printl(ocr2.getAllString());
  240.         } else {
  241.            printl("二值化后OCR识别失败");
  242.         }
  243.         
  244.         // 保存处理后的图像(可选)
  245.         // binImg.save("/sdcard/binary_image.png");
  246.         
  247.         // 释放内存
  248.         binMat.close();
  249.         binImg.close();
  250.         binImg2.close();
  251.     } catch (error) {
  252.         printl("threshold执行出错: " + error.message);
  253.     }
  254. }
  255. // 调用示例
  256. // thresholdExample(); // 取消注释以运行示例


  257. // 第八个方法:&#128204;invertColor - 图像颜色翻转(反色处理)
  258. /*
  259. 类别 详情说明
  260. 方法功能 对图像进行颜色翻转,将每个像素的RGB值反转(如白色→黑色、红色→青色等)
  261. 方法签名 void opencv.invertColor (Mat src)
  262. 返回值 void(无返回值,直接修改输入的Mat对象)
  263. 参数 - Mat src:待颜色翻转的原始图像(Mat对象)
  264. */
  265. // 示例:翻转图像颜色
  266. function invertColorExample() {
  267.     printl("=== invertColor 方法示例 ===");
  268.     try {
  269.         // 截图获取图像
  270.         const invertImage = screen.screenShotFull();
  271.         const invertMat = invertImage.getMat();
  272.         
  273.         // 翻转图像颜色
  274.         opencv.invertColor(invertMat);
  275.         printl("颜色已翻转的图像");
  276.         
  277.         // 保存处理后的图像(可选)
  278.         // invertImage.save("/sdcard/inverted_image.png");
  279.         
  280.         // 释放资源
  281.         invertMat.close();
  282.         invertImage.close();
  283.     } catch (error) {
  284.         printl("invertColor执行出错: " + error.message);
  285.     }
  286. }
  287. // 调用示例
  288. // invertColorExample(); // 取消注释以运行示例


  289. // ========================== 实际可用的完整示例 ==========================

  290. /**
  291. * 实际可用的OpenCV图像处理示例
  292. * 演示完整的图像处理流程
  293. */
  294. async function practicalOpenCVExample() {
  295.     printl("=== OpenCV完整处理流程示例 ===");
  296.    
  297.     try {
  298.         // 1. 全屏截图
  299.         printl("1. 执行全屏截图");
  300.         const screenshot = screen.screenShotFull();
  301.         const mat = screenshot.getMat();
  302.         printl("   截图完成,图像尺寸: " + mat.width + "x" + mat.height);
  303.         
  304.         // 2. 图像预处理 - 转为灰度图
  305.         printl("2. 图像转为灰度图");
  306.         opencv.toGray(mat);
  307.         
  308.         // 3. 使用cv文件查找图像
  309.         printl("3. 使用cv文件查找图像");
  310.         const findResults = opencv.findImagesEx("图色961575.cv");
  311.         if (findResults && findResults.length > 0) {
  312.             printl("   找到 " + findResults.length + " 个匹配目标");
  313.             const firstResult = findResults[0];
  314.             printl("   第一个匹配目标相似度: " + firstResult.score());
  315.             printl("   位置信息: " + firstResult.getRect().toString());
  316.         } else {
  317.             printl("   未找到匹配目标");
  318.         }
  319.         
  320.         // 4. 使用cv文件进行OCR识别
  321.         printl("4. 使用cv文件进行OCR识别");
  322.         var ocrResult=opencv.OCREx('图色995593.cv');
  323.         if(ocrResult!=null){
  324.            printl(ocrResult.getAllString());
  325.         } else {
  326.            printl("OCR识别失败或未识别到文字");
  327.         }
  328.         
  329.         // 5. 图像二值化处理
  330.         printl("5. 图像二值化处理");
  331.         opencv.threshold(mat, 100, 200);
  332.         printl("   二值化处理完成");
  333.         
  334.         // 6. 颜色翻转
  335.         printl("6. 图像颜色翻转");
  336.         opencv.invertColor(mat);
  337.         printl("   颜色翻转完成");
  338.         
  339.         // 7. 裁切图像
  340.         printl("7. 裁切图像中间区域");
  341.         opencv.extractRegion(mat, [0.25, 0.25, 0.5, 0.5], true);
  342.         printl("   图像裁切完成");
  343.         
  344.         // 释放资源
  345.         mat.close();
  346.         screenshot.close();
  347.         printl("8. 资源释放完成");
  348.         
  349.     } catch (error) {
  350.         printl("执行过程中发生错误: " + error.message);
  351.     }
  352.    
  353.     printl("=== OpenCV图像处理示例结束 ===");
  354. }

  355. // 运行实际示例
  356. practicalOpenCVExample(); // 取消注释以运行示例

  357. // ... existing code ...
复制代码








欢迎光临 B2B网络软件 (http://bbs.niubt.cn/) Powered by Discuz! X3.2