道无涯的OpenCV插件文档

引言

如何使用插件

安装 Autojs.pro 9.3.11、安装 OpenCV 插件,在脚本内初始化,仅需调用一次即可

var OpenCV = $plugins.load("com.daowuya.opencv");

详尽的API调用请见下文。

创建与释放

zeros 创建mat对象

创建一个空mat对象。

参数
字段 类型 必须 说明
width int 图像宽度
heigth int 图像高度
type int (可选) 默认=16 图像类型。16=彩色图、0=灰色图 24=全彩RGBA图像
color int[] (可选) 默认=[0,0,0,0] 填充颜色(RGBA)。默认:黑色[0,0,0,0]。
返回值

mat|null

调用示例
// 生成纯红色图并保存
var mat = OpenCV.zeros(100, 100, 16, [255, 0, 0, 0]);
OpenCV.toFile(mat, "/sdcard/Pictures/红.png");
OpenCV.release(mat);

release 释放mat对象

释放 mat 对象占用的内存空间,释放后该mat对象不应再使用。

参数

返回值

调用示例
OpenCV.release(mat);

copy 复制mat对象

复制一个现有mat对象的完整拷贝。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

mat|null

调用示例
var mat = OpenCV.copy(mat);

载入和导出

loadFromFile 从文件加载

从文件加载资源。支持png、bmp、jpg等格式。

参数
字段 类型 必须 说明
fileName string 文件路径,如:/sdcard/Pictures/1.jpg
mode int (可选) 默认=1 加载模式。-1=图像的全部通道、 0=灰度。 1=彩色3通道
返回值

mat|null

调用示例
// 彩色图转灰色图,载入时使用灰度模式载入,再保存成另一个图像文件
var mat=OpenCV.loadFromFile("/sdcard/Pictures/1.jpg",0);
OpenCV.toFile(mat,"/sdcard/Pictures/彩色转灰色.jpg");
OpenCV.release(mat);

loadFromBitmap 从BitMap加载

从bitMap加载资源。bitmap图像资源必须为3通道或4通道。

参数
字段 类型 必须 说明
bitmap bitmap bitmap对象
mode boolean (可选) 默认=true 加载资源时,是否保留A通道。默认保留。
返回值

mat|null

调用示例
// 加载Autojs截图数据并保存
var capture = $automator.takeScreenshot(); // 截图
var mat=OpenCV.loadFromBitmap(capture.bitmap); // 从bitmap加载
OpenCV.toFile(mat, "/sdcard/Pictures/bitmap.png"); // 保存到文件
OpenCV.release(mat);//释放
capture.recycle();

toFile 保存到文件

  • 把mat对象的图像数据保存到文件。文件的后缀名决定了保存的格式。
  • 该功能也可用作png、jpg、bmp、等图像格式之间的转换。
参数
字段 类型 必须 说明
mat mat mat矩阵对象
filePath string 欲保存的图像路径
返回值

boolean

调用示例
OpenCV.toFile(mat, "/sdcard/Pictures/bitmap.png");

toBitmap 转到bitmap

mat矩阵对象中的图像数据,转换到bitmap。

参数
字段 类型 必须 说明
mat mat 欲转换mat对象
返回值

bitmap | null

调用示例
var bitmap = OpenCV.toBitmap(mat);
console.log(bitmap)

属性获取

getHeight 取高度

取mat对象高度。也可以调用原生 mat.rows() 获取宽度。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

-1表示mat对象无效。

调用示例
console.log("图像高度:", OpenCV.getHeight(mat));

getWidth 取宽度

取mat对象宽度。也可以调用原生 mat.cols() 获取宽度。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

-1表示mat对象无效。

调用示例
console.log("图像宽度:", OpenCV.getWidth(mat));

getType 取类型

取mat对象类型。也可以调用原生 mat.type() 获取类型。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

-1表示mat对象无效。

调用示例
console.log("图像类型:", OpenCV.getType(mat));

getChannels 取通道数

取mat对象中图像的通道数量。也可以调用原生 mat.channels() 获取类型。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

-1表示mat对象无效。

调用示例
console.log("图像通道数:", OpenCV.getChannels(mat));

颜色转换

toGray 转到灰度

灰度化图像。颜色格式必须为 颜色格式必须为 BGRBGRAGray

参数
字段 类型 必须 说明
mat mat 欲转换的mat对象
返回值

mat | null

调用示例
var mat=OpenCV.loadFromFile("/sdcard/Pictures/1.jpg"); // 载入图像
var mat_gray=OpenCV.toGray(mat); // 转灰度
OpenCV.toFile(mat_gray, "/sdcard/Pictures/转灰色.jpg"); // 保存到文件
OpenCV.release(mat);
OpenCV.release(mat_gray);

toBGR 转到BGR

  • 转到BGR。颜色格式必须为 颜色格式必须为 BGRBGRAGray
  • 本插件所有操作仅支持BGR和灰度
参数
字段 类型 必须 说明
mat mat 欲转换的mat对象
返回值

mat | null

调用示例
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg", 0); // 载入时使用灰度模式载入
var mat_bgr=OpenCV.toBGR(mat); // 转BGR
OpenCV.toFile(mat_bgr, "/sdcard/Pictures/转BGR.jpg"); // 保存到文件
OpenCV.release(mat);
OpenCV.release(mat_bgr);

toBGRA 转到BGRA

  • 转到BGRA。颜色格式必须为 颜色格式必须为 BGRBGRAGray
  • 本插件所有操作仅支持BGR和灰度
参数
字段 类型 必须 说明
mat mat 欲转换的mat对象
返回值

mat | null

调用示例
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg", 0); // 载入时使用灰度模式载入
var mat_bgra=OpenCV.toBGRA(mat); // 转BGRA
OpenCV.toFile(mat_bgra, "/sdcard/Pictures/转BGRA.jpg"); // 保存到文件
OpenCV.release(mat);
OpenCV.release(mat_bgra);

贴图与裁剪

reSize 缩放图像

缩放图像。

参数
字段 类型 必须 说明
mat mat 欲缩放的mat对象
width int 图像新宽度(需大于0)
height int 图像新高度(需大于0)
参数(重载)
字段 类型 必须 说明
mat mat 欲缩放的mat对象
bfb int 缩放百分比(需大于0)
返回值

mat | null

调用示例
// 图像比例缩放、自定义缩放
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");// 载入图像

var mat_50 = OpenCV.reSize(mat,50); // 缩放50%
var mat_自定宽高缩放 = OpenCV.reSize(mat,100,100); // 自定宽高缩放

OpenCV.toFile(mat_50, "/sdcard/Pictures/mat_50.png"); // 保存到文件
OpenCV.toFile(mat_自定宽高缩放, "/sdcard/Pictures/mat_自定宽高缩放.png");

OpenCV.release(mat_50); // 释放
OpenCV.release(mat); // 释放
OpenCV.release(mat_自定宽高缩放); // 释放

bitBlt 贴图拷贝

bitBlt可以进行图像块拷贝,从一幅图像中裁剪指定大小图像块,拷贝贴图到另一幅图像中。并可设置阿尔法权重,亮度校正,可用于:制作长图、logo水印。

参数
字段 类型 必须 说明
mat1 mat 贴图目标mat
x1 int 贴图左上角x(应大于 -1)
y1 int 贴图左上角y (应大于 -1)
x2 int 贴图右下角x,为-1时,表示缺省大小。否则将对裁剪图进行缩放。以迎合参数设置
y2 int 贴图右下角y,为-1时,表示缺省大小。否则将对裁剪图进行缩放。以迎合参数设置
mat2 mat 裁剪目标mat
x1 int 裁剪左上角x (应大于 -1)
y1 int 裁剪左上角y (应大于 -1)
x2 int 裁剪右下角x,为-1时,表示缺省大小。
y2 int 裁剪右下角y,为-1时,表示缺省大小。
alpha float 裁剪图贴到目标图像上时的混合权重,裁剪图的透明度,0-1之间。
gamma float 亮度校正值,表示混合之后是否进行亮度校正(提升或降低)-255-255之间,一般设置0
返回值

boolean

调用示例
// 图像色调调整
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//创建一个大小与原图大小、类型一致的图像。
var mat_color = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());

//使用绘制矩形方法,给图像填充指定颜色(粉红)。
OpenCV.rectangle(mat_color, 0, 0, mat.cols(), mat.rows(), [250,103,107,0]);

//使用bitBlt进行贴图。
OpenCV.bitBlt(mat, 0, 0, -1, -1, mat_color, 0, 0, -1, -1, 0.2, 0);

//保存结果到文件。
OpenCV.toFile(mat,"/sdcard/Pictures/tem1.jpg");

//释放
OpenCV.release(mat);
OpenCV.release(mat_color);
// 制作长图
// 原理:先使用zeros创建一个长图的模板,然后使用bitBlt往这个模板贴图,仅需要通过参数控制贴图范围。alpha参数决定了贴图透明度,当不需要透明度时,alpha的值应该设置为1。
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//将一个图片竖向拼接三份成长图
//创建一个长图模板 w*3h
var mat_long = OpenCV.zeros(OpenCV.getWidth(mat), OpenCV.getHeight(mat) * 3, 16);

//使用bitBlt将原图拷贝三次到长图模板
for (var i = 0; i < 3; i++) {
    OpenCV.bitBlt(mat_long, 0, i * OpenCV.getHeight(mat), -1, -1, mat, 0, 0, -1, -1, 1, 0);
}

//保存结果到文件
OpenCV.toFile(mat_long, "/sdcard/Pictures/tem1.jpg");

//释放
OpenCV.release(mat);
OpenCV.release(mat_long);

cut 裁剪图像

从指定mat对象中,裁剪图像的一部分。

参数
字段 类型 必须 说明
mat mat 输入mat对象
x1 int 裁剪左上角x。如为-1,将返回图像的完整拷贝
y1 int 裁剪左上角y。如为-1,将返回图像的完整拷贝
x2 int 裁剪右下角x。如为-1,将返回图像的完整拷贝
y2 int 裁剪右下角y。如为-1,将返回图像的完整拷贝
返回值

mat | null

调用示例
// 图像裁剪
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//从原图上裁剪[0,0,128,128]区域并返回新的mat对象。
var mat_cut = OpenCV.cut(mat, 0, 0, 128, 128);

//保存结果到文件。
OpenCV.toFile(mat_cut, "/sdcard/Pictures/tem1.jpg");

//释放
OpenCV.release(mat);
OpenCV.release(mat_cut);

pyrUp 上采样

上采样,放大并模糊图像。用于构建图像金字塔。把图像尺寸放大为原来的 2 倍,同时平滑处理,避免锯齿或噪点。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

mat | null

调用示例
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//进行pyrUp上采样
var mat_result = OpenCV.pyrUp(mat);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem1.jpg");

OpenCV.release(mat);//释放
OpenCV.release(mat_result);//释放

pyrDown 下采样

下采样,缩小并模糊图像。用于构建图像构建图像金字塔。先自动高斯模糊,缩小图像为原来的 1/2。

参数
字段 类型 必须 说明
mat mat mat对象
返回值

mat | null

调用示例
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//进行pyrDown下采样
var mat_result = OpenCV.pyrDown(mat);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem1.jpg");

OpenCV.release(mat);//释放
OpenCV.release(mat_result);//释放

基础绘制

drawText 写字

在mat对象中写字。(支持中文)

参数
字段 类型 必须 说明
mat mat mat对象
str string 欲写到mat上的文字(支持中文),文本换行支持使用换行符\n
sx int 画出位置x(文字左下角位置)
sy int 画出位置y(文字左下角位置)
textSize int (可选)默认=22 字体大小
color_int_arr4 int[] (可选)默认红色=[255,0,0,255] 文字颜色。RGBA数组。(A通道控制文字绘制透明度)
shadowColor int[] (可选)默认=文字颜色 阴影颜色。RGBA数组
style int (可选)默认=2 0、描边、1、填充、2、描边和填充
radius int (可选)默认=0 阴影半径
dx int (可选)默认=0 阴影偏移
dy int (可选)默认=0 阴影偏移
SkewX float (可选)默认=0 设置文字的 x 轴斜体程度,值越负 → 向右倾斜(正体),值越正 → 向左倾斜(反斜体)
scaleX float (可选)默认=1 设置文字在 X 轴的缩放比例,值 < 1.0 → 压缩字体,值 > 1.0 → 拉伸字体
spacing float (可选)默认=0 字之间间距
fontPath string (可选)默认=null(使用默认字体) 自定义字体的本地存储路径,字体必须是 .ttf.otf
返回值

boolean

调用示例
// 常用发光字
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "道无涯(发光字)", 50, 75, 50, [0, 255, 0, 255], [0, 255, 0, 255], 2, 10);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem1.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// 不发光字
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "道无涯(不发光)", 50, 75, 50, [0, 255, 0, 255], [0, 0, 0, 0], 2);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem2.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// 仅描边
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "道无涯(仅描边)", 50, 75, 50, [0, 255, 0, 255], [0, 0, 0, 0], 0);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem3.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// 描边发光
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "道无涯(描边发光)", 50, 75, 50, [0, 255, 0, 255], [0, 255, 0, 255], 0, 10);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem4.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// x轴拉伸
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "x轴拉伸", 50, 125, 20, [0, 255, 0, 255], [0, 255, 0, 255], 2, 0, 0, 0, 0, 5, 0);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem5.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// x轴右倾斜
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "x轴右倾斜", 50, 125, 50, [0, 255, 0, 255], [0, 255, 0, 255], 2, 0, 0, 0, -0.25, 1, 0);//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem6.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

// 使用自定义字体
var mat = OpenCV.zeros(500, 200, 16);
var mat_text = OpenCV.cut(mat, -1, -1, -1, -1);//拷贝
OpenCV.drawText(mat_text, "这是自定义的TTF字体(问藏书房.ttf)", 50, 125, 30, [0, 255, 0, 255], [0, 255, 0, 255], 2, 0, 0, 0, 0, 1, 0, "/sdcard/Pictures/问藏书房.ttf");//写字
OpenCV.toFile(mat_text, "/sdcard/Pictures/tem7.jpg");
OpenCV.release(mat_text);// 释放
OpenCV.release(mat);

line 画直线

画直线

参数
字段 类型 必须 说明
mat mat mat对象
sx int 起点坐标x
sy int 起点坐标y
ex int 终点坐标x
ey int 终点坐标y
color_int_arr4 int[] (可选)默认红色=[255,0,0,255] 颜色,4成员数组,RGBA。
width int (可选)默认=1 线宽度
type int (可选)默认=8 填充类型。8:八邻域填充法;4:四邻域填充法;16:反锯齿填充法
shift int (可选)默认=0 偏移
返回值

boolean

调用示例
// 画一个正方形
var mat = OpenCV.zeros(300, 300, 16);
OpenCV.line(mat, 100, 100, 200, 100, [255, 0, 0, 0], 1);
OpenCV.line(mat, 100, 100, 100, 200, [0, 255, 0, 0], 2);
OpenCV.line(mat, 200, 200, 200, 100, [0, 0, 255, 0], 3);
OpenCV.line(mat, 200, 200, 100, 200, [0, 0, 255, 0], 4);
OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");// 写出到文件
OpenCV.release(mat);// 释放

ellipse 画圆

画圆

参数
字段 类型 必须 说明
mat mat mat对象
ax int 圆心,中心坐标x
ay int 圆心,中心坐标y
widthX int 圆横半径,与圆纵半径,画正圆时,两者值应相等
heightY int (可选)默认=widthX 圆横半径,与圆纵半径,画正圆时,两者值应相等
color_int_arr4 int[] (可选)默认红色=[255,0,0,255] 颜色,4成员数组,RGBA。
width int (可选)默认=-1 线宽度。-1:填充整个圆;0:等同于 1(实际线宽为1);> 0:绘制轮廓线,线宽为指定的值(像素)
type int (可选)默认=8 填充类型。8:八邻域填充法;4:四邻域填充法;16:反锯齿填充法
shift int (可选)默认=0 偏移
angle int (可选)默认=0 圆整体旋转角度
sAngle int (可选)默认=0 圆开始角度,用于控制绘制圆的某部分
eAngle int (可选)默认=360 圆结束角度,用于控制绘制圆的某部分
返回值

boolean

调用示例
// 画各种圆
var mat = OpenCV.zeros(500, 500, 16);
OpenCV.ellipse(mat, 100, 100, 50, 50, [255, 0, 0, 0], 5);// 圆圈
OpenCV.ellipse(mat, 250, 100, 50, 50, [255, 255, 0, 0], -1);// 实心圆
OpenCV.ellipse(mat, 400, 100, 50, 100, [255, 0, 255, 0], -1, 8, 0, 0, 0, 360);// 椭圆
OpenCV.ellipse(mat, 100, 250, 50, 100, [255, 255, 255, 0], -1, 8, 0, 30, 0, 360);// 圆旋转
OpenCV.ellipse(mat, 250, 250, 50, 50, [0, 255, 0, 0], -1, 8, 0, 0, 0, 270);// 圆饼
OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");
OpenCV.release(mat);// 释放

rectangle 画矩形

画矩形

参数
字段 类型 必须 说明
mat mat mat对象
sx int 左上角坐标x
sy int 左上角坐标y
ex int 右下角坐标x
ex int 右下角坐标y
color_int_arr4 int[] (可选)默认红色=[255,0,0,255] 颜色,4成员数组,RGBA。
width int (可选)默认=-1 线宽度。-1:填充整个圆;0:等同于 1(实际线宽为1);> 0:绘制轮廓线,线宽为指定的值(像素)
type int (可选)默认=8 填充类型。8:八邻域填充法;4:四邻域填充法;16:反锯齿填充法
shift int (可选)默认=0 偏移
返回值

boolean

调用示例
// 画矩形
var mat = OpenCV.zeros(500, 500, 16);
OpenCV.rectangle(mat, 100, 100, 200, 200, [255, 0, 0, 0], 5);// 画矩形
OpenCV.rectangle(mat, 250, 100, 350, 200, [255, 0, 0, 0], -1);// 画矩形边框
OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");
OpenCV.release(mat);// 释放

setColor 置点颜色

设置颜色。颜色格式RGBA。高效率的操作,请参考OpenCV中 mat.set()方法。

参数
字段 类型 必须 说明
mat mat mat对象
x int 坐标x
y int 坐标y
color_int_arr4 int[] (可选)默认红色=[255,0,0,255] 颜色,4成员数组,RGBA。
返回值

boolean

调用示例
// 回忆下大彩电时代
var mat = OpenCV.zeros(300, 300, 16);

//定义颜色
var color_red = [255, 0, 0, 0];
var color_green = [0, 255, 0, 0];
var color_blue = [0, 0, 255, 0];

//画点
for (var y = 0; y < 300; y++) {
    for (var x = 0; x < 300; x += 3) {
        OpenCV.setColor(mat, x, y, color_red);
        OpenCV.setColor(mat, x + 1, y, color_green);
        OpenCV.setColor(mat, x + 2, y, color_blue);
    }
}

//写到文件
OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");

//释放mat
OpenCV.release(mat);

getColor 取点颜色

取指定点颜色。返回RGBA格式。 高效率的操作,请参考OpenCV中 mat.get()方法。

参数
字段 类型 必须 说明
mat mat mat对象
x int 坐标x
y int 坐标y
返回值

int[]

调用示例
var mat = OpenCV.zeros(100, 100, 16);
var RGBA_arr = OpenCV.getColor(mat, 0, 1);
console.log(RGBA_arr); // [0, 0, 0] 

var mat1 = OpenCV.zeros(100, 100, 24);
var RGBA_arr1 = OpenCV.getColor(mat1, 0, 1);
console.log(RGBA_arr1); // [0, 0, 0, 0] 

OpenCV.release(mat);
OpenCV.release(mat1);

位运算

not 取反

取反,翻转图像颜色。 常用于掩膜翻转

参数
字段 类型 必须 说明
mat mat mat对象
返回值

mat | null

调用示例
// 黑白图取反,取反后白变黑,黑变白
var mat = OpenCV.zeros(50, 50, 16);

// 画线
OpenCV.line(mat, 0, 0, 50, 50, [255, 255, 255, 0], 10);

// 取反
var mat_not = OpenCV.not(mat);

OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");
OpenCV.toFile(mat_not, "/sdcard/Pictures/tem2.jpg");
OpenCV.release(mat);// 释放
OpenCV.release(mat_not);// 释放
// 彩色图取反,取反后底片效果
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//取反
var mat_not = OpenCV.not(mat);

OpenCV.toFile(mat, "/sdcard/Pictures/tem1.jpg");
OpenCV.toFile(mat_not, "/sdcard/Pictures/tem2.jpg");
OpenCV.release(mat);// 释放
OpenCV.release(mat_not);// 释放

and 位与

  • 位与,可增强对比度,使得图像轮廓更清晰。可掩码处理图像、可过滤不需要的部分
  • 位与真值表:
A B AB
1 1 1
1 0 0
0 1 0
0 0 0
参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// 通过AND运算分离RGB通道
// 需要自己调节颜色值(示例红通道)
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");
// 创建另一个运行对象
var mat_mask = OpenCV.zeros(OpenCV.getWidth(mat), OpenCV.getHeight(mat), OpenCV.getType(mat), [255, 0, 0, 255]);
// and计算
var mat_and = OpenCV.and(mat, mat_mask);
// 保存到文件
OpenCV.toFile(mat_and, "/sdcard/Pictures/tem1.jpg");
// 释放
OpenCV.release(mat);
OpenCV.release(mat_mask);
OpenCV.release(mat_and);

or 位或运算

  • 位或,可增强图像亮度。可掩码处理图像(常用于掩模合并)。
  • 位或真值表:
A B AB
1 1 1
1 0 1
0 1 1
0 0 0
参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// or增加图像亮度
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");
// 创建另一个运行对象
var mat_mask = OpenCV.zeros(OpenCV.getWidth(mat), OpenCV.getHeight(mat), OpenCV.getType(mat), [50, 50, 50, 0]);
// or计算
var mat_or = OpenCV.or(mat, mat_mask);
// 保存到文件
OpenCV.toFile(mat_or, "/sdcard/Pictures/tem1.jpg");
// 释放
OpenCV.release(mat);
OpenCV.release(mat_mask);
OpenCV.release(mat_or);

xor 异或运算

  • 异位,图像计算和还原。去除图像中相同的部分。在找茬类游戏中,该函数可一步到位。
  • 异或真值表:
A B AB
1 1 0
1 0 1
0 1 1
0 0 0
参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// 图像色彩加密和还原(该方法可对图像进行处理加密用)
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

// 创建掩模,类型、大小与原图大小一样。并填充一些颜色
var mat_mask = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());
OpenCV.rectangle(mat_mask, 0, 0, mat_mask.cols(), mat_mask.rows(), [255, 255, 0, 0], 1000);
OpenCV.toFile(mat_mask, "/sdcard/Pictures/tem1.jpg");

// 进行or位运算
var mat_xor = OpenCV.xor(mat, mat_mask);
OpenCV.toFile(mat_xor, "/sdcard/Pictures/tem2.jpg");

// mat xor mat_mask 的结果,再次 xor mat_mask
var mat_xor_2 = OpenCV.xor(mat_xor, mat_mask);
OpenCV.toFile(mat_xor_2, "/sdcard/Pictures/tem3.jpg");

OpenCV.release(mat);// 释放
OpenCV.release(mat_mask);// 释放
OpenCV.release(mat_xor);// 释放
OpenCV.release(mat_xor_2);// 释放

add 加运算

加运算。可增加图像亮度。

参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// add增加图像亮度
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

// 创建掩模,类型、大小与原图大小一样。并填充一些颜色
var mat_mask = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());
OpenCV.rectangle(mat_mask, 0, 0, mat_mask.cols(), mat_mask.rows(), [100, 100, 100, 0], 1000);
OpenCV.toFile(mat_mask, "/sdcard/Pictures/tem1.jpg");

// 进行add运算
var mat_result = OpenCV.add(mat, mat_mask);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem2.jpg");

OpenCV.release(mat);//释放
OpenCV.release(mat_mask);//释放
OpenCV.release(mat_result);//释放

sub 减运算

减运算。可降低图像亮度。可使用它做“帧差法”计算。

参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象。 mat1-mat2
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// 帧差法,提取图片彩色边缘(由于保留了领域差,所以是无锯齿的)
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");
var w = OpenCV.getWidth(mat);
var h = OpenCV.getHeight(mat);
var type = OpenCV.getType(mat);

// 帧差法模拟X轴梯度
var mat_n = OpenCV.zeros(w, h, type, [0, 0, 0, 0]);//创建模板

// 留左边
OpenCV.bitBlt(
    mat_n,
    1, 0, -1, -1,
    mat,
    0, 0, w - 1, h,
    1, 0
);
var mat_sub_x1 = OpenCV.sub(mat, mat_n);
OpenCV.toFile(mat_n, "/sdcard/Pictures/mat_n.png");
OpenCV.toFile(mat_sub_x1, "/sdcard/Pictures/mat_sub_x1.png");

// 留顶边
OpenCV.rectangle(mat_n, 0, 0, w, h, [0, 0, 0, 0, 0], -1);
OpenCV.bitBlt(
    mat_n,
    0, 1, -1, -1,
    mat,
    0, 0, w, h - 1,
    1, 0
);
var mat_sub_y1 = OpenCV.sub(mat, mat_n);
OpenCV.toFile(mat_n, "/sdcard/Pictures/mat_n.png");
OpenCV.toFile(mat_sub_y1, "/sdcard/Pictures/mat_sub_y1.png");

// 留右边
OpenCV.rectangle(mat_n, 0, 0, w, h, [0, 0, 0, 0, 0], -1);
OpenCV.bitBlt(
    mat_n,
    0, 0, -1, -1,
    mat,
    1, 0, w - 1, h,
    1, 0
);
var mat_sub_x2 = OpenCV.sub(mat, mat_n);
OpenCV.toFile(mat_n, "/sdcard/Pictures/mat_n.png");
OpenCV.toFile(mat_sub_x2, "/sdcard/Pictures/mat_sub_x2.png");

// 留底边
OpenCV.rectangle(mat_n, 0, 0, w, h, [0, 0, 0, 0, 0], -1);
OpenCV.bitBlt(
    mat_n,
    0, 0, -1, -1,
    mat,
    0, 1, w, h - 1,
    1, 0
);
var mat_sub_y2 = OpenCV.sub(mat, mat_n);
OpenCV.toFile(mat_n, "/sdcard/Pictures/mat_n.png");
OpenCV.toFile(mat_sub_y2, "/sdcard/Pictures/mat_sub_y2.png");

// 合成编译
var mat_add = OpenCV.or(mat_sub_x1, mat_sub_x2);
mat_add = OpenCV.or(mat_add, mat_sub_y1);
mat_add = OpenCV.or(mat_add, mat_sub_y2);

OpenCV.toFile(mat_add, "/sdcard/Pictures/mat_add.png")
OpenCV.toFile(OpenCV.and(mat, mat_add), "/sdcard/Pictures/mat_xor.png")
// sub减少图像亮度
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

// 创建掩模,类型、大小与动漫大小一样。并填充一些颜色
var mat_mask = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());
OpenCV.rectangle(mat_mask, 0, 0, mat_mask.cols(), mat_mask.rows(), [100, 100, 100, 0], 1000);
OpenCV.toFile(mat_mask, "/sdcard/Pictures/tem1.jpg");

// 进行sub运算
var mat_result = OpenCV.sub(mat, mat_mask);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem2.jpg");

OpenCV.release(mat);// 释放
OpenCV.release(mat_mask);// 释放
OpenCV.release(mat_result);// 释放

mul 乘运算

乘运算。可增加图像对比度。

参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象。 mat1-mat2
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// mul增加图像对比度
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

//创建掩模,类型、大小与动漫大小一样。并填充一些颜色
var mat_mask = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());
OpenCV.rectangle(mat_mask, 0, 0, mat_mask.cols(), mat_mask.rows(), [2, 2, 2, 0], 1000);
OpenCV.toFile(mat_mask, "/sdcard/Pictures/tem1.jpg");

//进行mul运算
var mat_result = OpenCV.mul(mat, mat_mask);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem2.jpg");

OpenCV.release(mat);//释放
OpenCV.release(mat_mask);//释放
OpenCV.release(mat_result);//释放

div 除运算

除运算。可降低图像对比度。

参数
字段 类型 必须 说明
mat1 mat 参与计算的mat对象。 mat1-mat2
mat2 mat 参与计算的mat对象
返回值

mat | null

调用示例
// div降低图像对比度
var mat = OpenCV.loadFromFile("/sdcard/Pictures/1.jpg");

// 创建掩模,类型、大小与动漫大小一样。并填充一些颜色
var mat_mask = OpenCV.zeros(mat.cols(), mat.rows(), mat.type());
OpenCV.rectangle(mat_mask, 0, 0, mat_mask.cols(), mat_mask.rows(), [2, 2, 2, 0], 1000);
OpenCV.toFile(mat_mask, "/sdcard/Pictures/tem1.jpg");

// 进行div运算
var mat_result = OpenCV.div(mat, mat_mask);
OpenCV.toFile(mat_result, "/sdcard/Pictures/tem2.jpg");

OpenCV.release(mat);// 释放
OpenCV.release(mat_mask);// 释放
OpenCV.release(mat_result);// 释放

内容太多了,慢慢熬...


作 者:道无涯
来 源:道无涯博客
链 接: https://www.daowuya.love/plugin_opencv/
版 权 声 明:本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议。文章版权归作者所有,未经允许请勿转载!


暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇