opencv中step[i],step1(i),elemsize,elemsize1

首先需要确定的一点是,step[i],step1(i),elemsize,elemsize1都是指的字节数

1 opencv中Mat类的elemsize是每个元素的字节数,如果一个图像是3通道,每个通道是16位,那么
其elemsize就是3*(16/8)=6,即每个元素占6个字节
2 opencv中Mat类的elemsize1是指每个元素每个通道所占的字节数,对应于上面就是2个字节

3 opencv中Mat类的step,step是一个数组,定义了矩阵的布局,需要注意的是几个固定的等式:
step1(i)=step[i]/elemsize1;step[m-1]=elemsize;其中m是图像的维数,step1(m-1)=channels;

矩阵 (M) 中数据元素的地址计算公式:
addr(Mi0,i1,…im-1) = M.data + M.step[0] * i0 + M.step[1] * i1 + … + M.step[m-1] * im-1 (其中 m = M.dims M的维度)

下面举例:对于2维的情况:
一个 3 X 4 的矩阵,假设其数据类型为 CV_8U,也就是单通道的 uchar 类型

这是一个二维矩阵,那么维度为 2 (M.dims == 2);
M.rows == 3; M.cols == 4;
sizeof(uchar) = 1,那么每一个数据元素大小为 1 (M.elemSize() == 1, M.elemSize1() == 1);
CV_8U 得到 M.depth() == 0, M.channels() == 1;
因为是二维矩阵,那么 step 数组只有两个值, step[0] 和 step[1] 分别代表一行的数据大小和一个元素的数据大小,则 M.step[0] == 4, M.step[1] == 1;
M.step1(0) == M.cols = 4; M.step1(1) == 1;
假设上面的矩阵数据类型是 CV_8UC3,也就是三通道

M.dims == 2; M.channels() == 3;M.depth() == 0;
M.elemSize() == 3 (每一个元素包含3个uchar值) M.elemSize1() == 1 (elemSize / channels)
M.step[0] == M.cols * M.elemSize() == 12, M.step[1] == M.channels() * M.elemSize1() == M.elemSize() == 3;
M.step(0) == M.cols * M.channels() == 12 ; M.step(1) == M.channels() == 3;
2维时

对于3维时:
这里写图片描述
上面是一个 3 X 4 X 6 的矩阵,假设其数据类型为 CV_16SC4,也就是 short 类型

M.dims == 3 ; M.channels() == 4 ; M.elemSize1() == sizeof(short) == 2 ;
M.rows == M.cols == –1;
M.elemSize() == M.elemSize1() * M.channels() == M.step[M.dims-1] == M.step[2] == 2 * 4 == 8;
M.step[0] == 4 * 6 * M.elemSize() == 192;
M.step[1] == 6 * M.elemSize() == 48;
M.step[2] == M.elemSize() == 8;
M.step1(0) == M.step[0] / M.elemSize() == 192 / 2 == 96 (第一维度(即面的元素个数) * 通道数);
M.step1(1) == M.step[1] / M.elemSize() == 48 / 2 == 24(第二维度(即行的元素个数/列宽) * 通道数);
M.step1(2) == M.step[2] / M.elemSize() == M.channels() == 4(第三维度(即元素) * 通道数);

  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在 OpenMV ,`find_template()` 是一个函数,用于在图像查找模板。模板匹配是一种基于相似度的图像匹配方法,可以用于目标检测、目标跟踪等场景。 该函数的使用方式如下: ```python image.find_template(template, threshold, roi, step=4, search=image.TEMPLATE_MATCHING, copy=True) ``` 其,`template` 是一个 Image 对象,表示待查找的模板图像。`threshold` 是一个浮点数,表示匹配的相似度阈值,范围为 0~1,值越高表示匹配要求越严格。`roi` 是一个元组,表示感兴趣区域(Region of Interest)的坐标和尺寸。`step` 是一个整数,表示模板匹配时滑动窗口的步长,默认为 4。`search` 是一个整数,表示模板匹配的方式,可以是 `image.TEMPLATE_MATCHING` 或 `image.CORRELATION_COEFFICIENT_MATCHING`。`copy` 是一个布尔值,表示是否复制图像进行处理。 例如,你可以使用以下代码在图像查找模板: ```python import sensor, image sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.skip_frames(time = 2000) template = image.Image("/template.pgm") img = sensor.snapshot() r = img.find_template(template, 0.7) if r: img.draw_rectangle(r) ``` 在上面的例子,我们先加载一个模板图像,然后从相机捕获一张图像,调用 `find_template()` 函数进行匹配,最后在匹配到的区域绘制一个矩形框。 需要注意的是,模板图像和待匹配的图像应该尽量保持相同的色彩和尺寸,否则会影响匹配的效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值