🎨图像视觉处理[opencv]小结1
// 1. HSV颜色变换:对图像进行HSV通道的颜色变换,可调整色相、饱和度、对比度
// 参数说明:输入图像(Mat)、色相参数(int)、饱和度参数(int)、对比度参数(int)
// 返回值:处理后的Mat图像
function hsvTransform() {
// 截取屏幕区域(432,768)大小、100质量的图像并转为Mat格式
var mat = screen.screenShot(432, 768, 100).getMat();
// 调用HSV变换:色相17、饱和度17、对比度17
opencv.HSV(mat, 17, 17, 17);
// 输出处理结果
printl(mat);
return mat;
}
let hsvResult = hsvTransform();
// 2. 对比度调整:调整图像对比度,通过阈值控制强弱
// 参数说明:输入图像(Mat)、对比度阈值(double,值越大对比度越强)
// 返回值:处理后的Mat图像
function adjustContrast() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 调整对比度:阈值0.5(降低对比度)
opencv.adjustContrast(mat, 0.5);
printl(mat);
return mat;
}
let contrastResult = adjustContrast();
// 3. Bitmap转Mat:将Bitmap格式图像转换为OpenCV处理用的Mat格式
// 参数说明:输入图像(Bitmap)
// 返回值:转换后的Mat图像
function bitmapToMat() {
// 先获取屏幕截图的Bitmap对象
var screenshot = screen.screenShot(432, 768, 100);
var bmp = screenshot.getBitmap();
// 转换为Mat格式
var mat = opencv.bitmapToMat(bmp);
printl(mat);
return mat;
}
let matFromBmp = bitmapToMat();
// 4. 颜色过滤:保留设定的目标颜色,过滤其他颜色,适用于固定颜色目标筛选
// 参数说明:输入图像(Mat)、目标颜色数组(String[],格式["#RRGGBB",...])、匹配阈值(int)
// 返回值:过滤后的Mat图像
function colorFilter() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 定义目标颜色数组(土黄、金黄等)
var colors = ["#615018", "#D9C15D", "#010000", "#F4C51F"];
// 过滤颜色:阈值2(允许轻微颜色偏差)
mat = opencv.colorFilter(mat, colors, 2);
printl(mat);
return mat;
}
let filterResult = colorFilter();
// 5. 区域截图:按百分比裁剪图像或保留指定区域(区域外变白)
// 参数说明:输入图像(Mat)、区域范围(double[],[左上角x%,左上角y%,右下角x%,右下角y%])、是否裁剪(boolean)
// 返回值:处理后的区域图像(Mat)
function extractRegion() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 定义区域:左上角(3.935%,16.406%)到右下角(53.472%,63.281%)
var region = [0.03935, 0.16406, 0.53472, 0.63281];
// 处理区域:false表示区域外变白,不裁剪
opencv.extractRegion(mat, region, false);
printl(mat);
return mat;
}
let regionResult = extractRegion();
// 6. 面积过滤:保留图像中面积在指定范围内的区域,过滤过小/过大区域
// 参数说明:输入图像(Mat)、最小面积(double)、最大面积(double)
// 返回值:过滤后的Mat图像
function inArea() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 保留面积1~10000的区域
opencv.inArea(mat, 1, 10000);
printl(mat);
return mat;
}
let areaResult = inArea();
// 7. 边缘提取:基于Canny算法提取图像边缘,高阈值通常为低阈值2~3倍
// 参数说明:输入图像(Mat)、低阈值(double)、高阈值(double)
// 返回值:边缘提取后的Mat图像
function cannyEdge() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 提取边缘:低阈值50,高阈值100(符合2倍关系)
opencv.Canny(mat, 50, 100);
printl(mat);
return mat;
}
let cannyResult = cannyEdge();
// 8. OCR识别:通过训练字库识别指定区域文字,返回识别结果
// 参数说明:输入图像(Mat)、字库路径(String)、相似度(double 0~1)、预期文字数(int)、识别区域(double[])
// 返回值:ocrResult对象(含文字及位置信息)
function ocr() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 识别区域:全图([0,0,1,1]表示0%~100%范围)
var ocrRegion = [0, 0, 1, 1];
// 调用OCR:字库"图色976442.ocr",相似度0.8,不限制文字数
var ocrRes = opencv.OCR(mat, '图色976442.ocr', 0.8, 0, ocrRegion);
// 输出识别结果
ocrRes ? printl("OCR识别结果:" + ocrRes.getAllString()) : print.err('OCR识别失败');
return ocrRes;
}
let ocrResult = ocr();
// 9. CV文件OCR:通过预定义的CV文件(含字库和区域)进行OCR识别
// 参数说明:CV文件路径(String)
// 返回值:ocrResult对象(含识别结果)
function ocrEx() {
// 读取CV文件并识别
var ocrExRes = opencv.OCREx('图色598321.cv');
ocrExRes ? printl("CV文件OCR结果:" + ocrExRes.getAllString()) : print.err('CV文件OCR失败');
return ocrExRes;
}
let cvOcrResult = ocrEx();
// 10. 图像平滑:减少图像噪声、模糊图像,通过滤波和去毛边实现
// 参数说明:输入图像(Mat)、滤波值(int,值越大越平滑)、去毛边大小(int)
// 返回值:平滑后的Mat图像
function smooth() {
var mat = screen.screenShot(432, 768, 100).getMat();
// 平滑处理:滤波值3,去毛边2
var smoothMat = opencv.Smooth(mat, 3, 2);
printl(smoothMat);
return smoothMat;
}
let smoothResult = smooth();
// 11. 多点比色:验证图像中多个指定坐标的颜色是否符合预期,全匹配返回true
// 参数说明:输入图像(Mat)、目标点数组(String[],格式"x,y,#RRGGBB")、颜色误差(int)、坐标误差(int)、相似度(double)
// 返回值:boolean(是否全匹配)
function checkColors() {
var mat = screen.screenShot(900, 1600, 100).getMat();
// 目标点:x,y坐标+颜色(如"325,317,#F4C51F")
var points = ['325,317,#F4C51F', '357,364,#070200', '336,345,#100500', '356,386,#F4C51F'];
// 多点比色:颜色误差2,坐标误差5,相似度0.95
var isMatch = opencv.checkColors(mat, points, 2, 5, 0.95);
isMatch ? printl('多点比色成功') : print.err('多点比色失败');
return isMatch;
}
let colorCheckResult = checkColors();
// 12. CV文件多点比色:通过预定义的CV文件(含多点坐标和颜色)验证匹配
// 参数说明:CV文件路径(String)
// 返回值:boolean(是否匹配成功)
function checkColorsEx() {
// 基于CV文件验证多点比色
var isExMatch = opencv.checkColorsEx('图色246814.cv');
isExMatch ? printl('CV文件多点比色成功') : printl('CV文件多点比色失败');
return isExMatch;
}
let cvColorCheckResult = checkColorsEx();
// 13. 闭运算:先膨胀后腐蚀,用于填充图像小孔、连接邻近区域
// 参数说明:输入图像(Mat)、核大小(int,值越大效果越强)
// 返回值:闭运算处理后的Mat图像
function closeImg() {
var mat = screen.screenShot(900, 1600, 100).getMat();
// 闭运算:核大小3
opencv.closeImg(mat, 3);
printl(mat);
return mat;
}
let closeResult = closeImg();
方法 1:HSV 颜色变换
项目 | 内容 |
功能 | 对图像进行 HSV 通道的颜色变换 |
函数签名 | Mat HSV(Mat arg0, int arg1, int arg2, int arg3)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :输入图片- int arg1 :色相参数- int arg2 :饱和度参数- int arg3 :对比度参数 |
案例 | opencv.HSV(Mat, 0, 0, 0)
|
let mat:Mat=图色875078();
printl(mat);
function 图色875078(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//HSV颜色变换
opencv.HSV(mat,17,17,17)
return mat;
}
方法 2:对比度调整(adjustContrast
)
项目 | 内容 |
功能 | 调整图像对比度 |
函数签名 | Mat adjustContrast(Mat arg0, double arg1)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :mat 格式的输入图片- double arg1 :用于调整对比度的阈值 |
案例 | opencv.adjustContrast(Mat, 0)
|
let mat:Mat=图色195333();
printl(mat);
function 图色195333(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//二值化
opencv.threshold(mat,50,150);
return mat;
}
方法 3:bitmap 图转 mat(bitmapToMat
)
项目 | 内容 |
功能 | 将 Bitmap 格式图像转换为 Mat 格式图像 |
函数签名 | Mat bitmapToMat(Bitmap arg0)
|
返回值 | Mat
|
参数说明 | - Bitmap arg0 :Bitmap 格式的输入图像 |
案例 | opencv.bitmapToMat(bmp)
|
// 先获取截图的Bitmap对象
var screenshot = screen.screenShot(432, 768, 100);
var bmp = screenshot.getBitmap();
// 再将Bitmap转换为Mat
var mat = opencv.bitmapToMat(bmp);
printl(mat)
方法 4:颜色过滤(colorFilter
)
项目 | 内容 |
功能 | 保留设定的颜色,去除其他颜色;可有效对颜色不变的目标进行筛选 |
函数签名 | Mat colorFilter(Mat arg0, String[] arg1, int arg2)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :输入图片- String[] arg1 :颜色数组(示例:["#000000","#121212"] )- int arg2 :阈值 |
案例 | opencv.colorFilter(Mat, String[], 0)
|
let mat:Mat=图色254847();
printl(mat);
function 图色254847(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//颜色过滤并更新mat变量
mat = opencv.colorFilter(mat, ["#615018", "#D9C15D", "#010000", "#F4C51F"], 2);
return mat;
}
方法 5:区域截图(extractRegion
)
项目 | 内容 |
功能 | 图片按照设定百分比区域进行裁剪;第三个参数为是否剪切:若为true ,则减掉多余区域只保留设定图像;若为false ,则把区域外的图变成白色、区域内保持不变 |
函数签名 | Mat extractRegion(Mat arg0, double[] arg1, boolean arg2)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :输入图片- double[] arg1 :百分比区域- boolean arg2 :是否裁剪 |
案例 | opencv.extractRegion(Mat, double[], true)
|
let mat:Mat=图色651862();
printl(mat);
function 图色651862(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//区域截图
opencv.extractRegion(mat,[0.0393518518518519,0.1640625,0.534722222222222,0.6328125],false)
return mat;
}
方法 6:面积过滤(inArea
)
项目 | 内容 |
功能 | 面积过滤 |
函数签名 | Mat inArea(Mat arg0, double arg1, double arg2)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :mat 格式的输入图片- double arg1 :最小面积- double arg2 :最大面积 |
案例 | opencv.inArea(Mat, 0, 0)
|
let mat:Mat=图色100892();
printl(mat);
function 图色100892(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//面积过滤
opencv.inArea(mat,1,10000)
return mat;
}
方法 7:边缘提取(Canny
)
项目 | 内容 |
功能 | 提取图像边缘;一般高阈值是低阈值的 2 - 3 倍(例如低阈值为 50 时,高阈值为 150) |
函数签名 | Mat Canny(Mat arg0, double arg1, double arg2)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :输入图像- double arg1 :最低阈值- double arg2 :最高阈值 |
案例 | opencv.Canny(mat, 50, 150)
|
let mat:Mat=图色734271();
printl(mat);
function 图色734271(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//边缘提取
opencv.Canny(mat,50,100)
return mat;
}
方法 8:OCR(OCR
)
项目 | 内容 |
功能 | 通过训练字库识别 OCR |
函数签名 | ocrResult OCR(Mat arg0, String arg1, double arg2, int arg3, double[] arg4)
|
返回值 | ocrResult
|
参数说明 | - Mat arg0 :图片- String arg1 :字库文件- double arg2 :相似度- int arg3 :文字数量- double[] arg4 :区域范围 |
案例 | opencv.OCR(Mat,"",0,0,double[])
|
var ocr
crResult=图色976442();
if(ocr!=null){
printl(ocr.getAllString())
}else{
print.err('查找图色976442失败')
}
function 图色976442(){
//截屏并转成mat格式
var mat=screen.screenShot(432,768,100).getMat();
//OCR
return opencv.OCR(mat,'图色976442.ocr',0.8,0,[0,0,1,1])
}
方法 9:cv 文件 OCR(OCREx
)
项目 | 内容 |
功能 | cv 文件 OCR(对指定 cv 文件进行 OCR 识别) |
函数签名 | ocrResult OCREx(String arg0)
|
返回值 | ocrResult
|
参数说明 | - String arg0 :cv 文件名 |
案例 | opencv.OCREx("")
|
var ocr1=opencv.OCREx('图色598321.cv');
if(ocr1!=null){
printl(ocr1.getAllString());
}
方法 10:图像平滑(Smooth
)
项目 | 内容 |
功能 | 图像平滑 |
函数签名 | Mat Smooth(Mat arg0, int arg1, int arg2)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :mat 格式的输入图片- int arg1 :滤波值- int arg2 :去毛边大小 |
案例 | opencv.Smooth(Mat, 0, 0)
|
var mat = screen.screenShot(432, 768, 100).getMat();
var smoothMat = opencv.Smooth(mat, 0, 0);
printl(smoothMat);
方法 11:多点比色(checkColors
)
项目 | 内容 |
功能 | 多点比色;从图像中遍历查找所有的坐标和对应的颜色是否符合,符合返回true ,有一个不符则返回false |
函数签名 | boolean checkColors(Mat arg0, String[] arg1, int arg2, int arg3, double arg4)
|
返回值 | boolean
|
参数说明 | - Mat arg0 :mat 格式图片- String[] arg1 :颜色数组(示例:['10,9,#123233','9,9,#434323'] )- int arg2 :颜色误差范围- int arg3 :坐标误差范围- double arg4 :相似度 |
案例 | opencv.checkColors(Mat, String[], 0, 0, 0)
|
var result=图色717031();
if(result==true){
printl('找到图色717031')
}else{
print.err('查找图色717031失败')
}
function 图色717031(){
//截屏并转成mat格式
var mat=screen.screenShot(900,1600,100).getMat();
//比色
return opencv.checkColors(mat,['325,317,#F4C51F','357,364,#070200','336,345,#100500','356,386,#F4C51F'],2,5,0.95)
}
方法 12:cv 文件多点比色(checkColorsEx
)
项目 | 内容 |
功能 | cv 文件多点比色 |
函数签名 | boolean checkColorsEx(String arg0)
|
返回值 | boolean
|
参数说明 | - String arg0 :cv 文件名 |
案例 | opencv.checkColorsEx("")
|
//比色是否成功
var find=opencv.checkColorsEx('图色246814.cv');
if(find==true){
printl('找到');
}
方法 13:闭运算(closeImg
)
项目 | 内容 |
功能 | 闭运算 |
函数签名 | Mat closeImg(Mat arg0, int arg1)
|
返回值 | Mat
|
参数说明 | - Mat arg0 :输入图片- int arg1 :核大小 |
案例 | opencv.closeImg(Mat, 0)
|
let mat:Mat=图色308249();
printl(mat);
function 图色308249(){
//截屏并转成mat格式
var mat=screen.screenShot(900,1600,100).getMat();
//闭运算
opencv.closeImg(mat,3)
return mat;
}