梳理程序的笔记(三)

1 datamatrix提取

rotRects中存放的矩形框都是紧贴这图案的,大多数情况下都会损失一些边缘部分,而且不利于精确检测,因此需要适当的扩张边缘的长度,即 extlen

我的理解,将缩小一半的图片,四周以extlen的页边距画一个矩形,在这个举行内部的rostRects才能为是要处理的区域,即边界约束,其他不再范围内的区域去除;在范围内的区域边界点在放大为原来的2倍。

dPoints[j].x=dPoints[j].x*2;
dPoints[j].y=dPoints[j].y*2;

乘以2是因为,之前resize原图缩小了2倍,现在放大到原图的大小。

2 cutImg,裁剪图片并且矫正

拍摄到的原始图片,可能是变形或者歪的,(这与粘贴二维码的情况有关系),因此,通过仿射变换将它调整到我们理想的位置。

2.1 opencv的getAffineTransform()

仿射矩阵,是表示一个二维向量 X = [ x y ] X= \left [ \begin{matrix}x \\ y \end{matrix}\right ] X=[xy]经过线性变换矩阵 A = [ a 00 a 01 a 10 a 11 ] A= \left[ \begin{matrix} a_{00} & a_{01} \\ a_{10} & a_{11}\end{matrix}\right] A=[a00a10a01a11]和平移变换矩阵 T = [ b 00 b 01 ] T=\left[ \begin{matrix} b_{00} \\ b_{01}\end{matrix}\right] T=[b00b01]得到矩阵 B = [ x 1 y 1 ] B=\left[ \begin{matrix} x1 \\ y1 \end{matrix}\right] B=[x1y1]的一种矩阵,记为仿射矩阵 M = [ A B ] = [ a 00 a 01 b 00 a 10 a 11 b 10 ] M=\left[ \begin{matrix} A & B\end{matrix}\right]=\left[ \begin{matrix} a_{00} & a_{01} & b_{00} \\ a_{10} &a_{11} & b_{10}\end{matrix}\right] M=[AB]=[a00a10a01a11b00b10]

T = A ∗ [ x y ] + T = M ∗ [ x y 1 ] T= A * \left[ \begin{matrix} x \\ y\end{matrix}\right]+T=M*\left[\begin{matrix}x\\y\\1 \end{matrix}\right] T=A[xy]+T=Mxy1

因此, T = [ a 00 ∗ x + a 01 ∗ y + b 00 a 10 ∗ x + a 11 ∗ y + b 10 ] T=\left[\begin{matrix}a_{00}*x+a_{01}*y+b_{00} \\a_{10}*x+a_{11}*y+b_{10} \end{matrix}\right] T=[a00x+a01y+b00a10x+a11y+b10]

如上图所示的两张图片之间的仿射。

Mat getAffineTransform( InputArray src, InputArray dst ); //返回仿射矩阵
_warpMat = getAffineTransform(_dmPoints, dstTri);  //求得仿射变换矩阵M
        warpAffine(_srcImg, _dmImg, _warpMat, Size(60, 60));  //对原图上应用这种仿射变换,输出尺寸为60*60
        cvtColor(_dmImg,_dmImg,CV_BGR2GRAY);
2.2 opencv的warpAffine()

代码在2.1节的结尾处

void warpAffine( InputArray src, //输入要进行仿射变换的图片
                 OutputArray dst,  //输出仿射变换后的图片
                 InputArray M, //输入getAffineTransform得到的放射变换矩阵
                 Size dsize,    //设置输出仿射变换矩阵的大小
                 int flags=INTER_LINEAR, //插值算法标识符
                 int borderMode=BORDER_CONSTANT, //边界像素模式
                 const Scalar& borderValue=Scalar()); //边界取值,默认值Scalar()为0
flags可选参数含义
INTER_LINEAR双线性差值 (缺省使用)
INTER_AREA区域差值算法,使用象素关系重采样时,图像抽取的首选方法。当图像缩小时候,该方法可以避免波纹出现。当图像放大时,类似于 INTER_NEAREST 方法
INTER_CUBIC立方差值
INTER_NEAREST最邻近插值算法
INTER_LANCZOS4Lanczos插值(超过8x8领域的插值算法)
INTER_MAX用于插值的掩模板
WARP_INVERSE_MAP标志位,反变换
WARP_FILL_OUTLIERS标志位,用于填充目标图像的像素值,如果其中的一些值对应原图像的异常值,那么这些值讲被设为0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
程序笔记demo是一款基于小程序开发的云笔记应用程序。它可以帮助用户在小程序平台上轻松地记录、管理和分享笔记。 首先,在小程序笔记demo中,用户可以创建多个笔记本,并将笔记按照不同的分类进行整理。这样,用户可以更好地组织和查找自己的笔记内容。 其次,该应用提供了丰富的编辑功能。用户可以在笔记中添加文本、图像、链接等不同的媒体元素。而且,用户可以对文本内容进行字体、大小、颜色、对齐等样式的调整,以及对图像进行裁剪、旋转和滤镜处理等操作,使笔记内容更加丰富和生动。 此外,小程序笔记demo还提供了数据同步的功能。不论用户是在手机、平板还是电脑上,只要登录同一账号,即可实现笔记数据的同步和共享。这意味着用户可以随时随地访问自己的笔记,并且与他人共享自己的笔记内容,便于协同工作和知识分享。 另外,该应用还具备创新的云储存功能。小程序笔记demo将用户的笔记数据存储在云端,有效保障了数据的安全性和可靠性。即使用户更换设备或者卸载应用,也可以轻松地恢复之前的笔记数据。 总之,小程序笔记demo是一款便捷、高效的云笔记应用程序。它通过提供多样化的编辑和同步功能,为用户提供了更好的笔记管理和分享体验。无论是个人学习、工作办公还是团队协作,都是一款非常实用的工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值