道无涯的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 转到灰度

灰度化图像。颜色格式必须为 颜色格式必须为 BGR、BGRA、Gray

参数
字段 类型 必须 说明
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。颜色格式必须为 颜色格式必须为 BGR、BGRA、Gray
  • 本插件所有操作仅支持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。颜色格式必须为 颜色格式必须为 BGR、BGRA、Gray
  • 本插件所有操作仅支持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
小恐龙
花!
上一篇
下一篇