如何使图像矫直像凸轮扫描仪应用程序?

36次观看(过去30天)
大家好,我想做一个像camScanner一样的应用程序,让用户选择对象的角,然后根据这些角将图像平直,这样文本仍然是可读的。在这方面我需要帮助

答案(2)

粘土Swackhamer
粘土Swackhamer 2019年4月17日
编辑:粘土Swackhamer 2019年4月17日
嗨GMD,
这是我实现这类东西的一段代码。目标是将校准尺拉直,使其与图像边界对齐。我将附加图像显示的比例之前,它被旋转和图像显示旋转比例。代码的要点是,我找到连接刻度远角的对角线中的“斜边”,然后根据它的方向,我决定是顺时针旋转图像还是逆时针旋转图像。因为你的实现会有点不同,我将跳过其余的代码,但希望这能给你主要的思想。
决定以哪种方式旋转图像。
如果(斜率> 0)看起来是负斜率
Angle_rotate = 45 - abs(angle_hypot);
field_rotate = imrotate(field, -angle_rotate);
elseif(斜率<= 0)看起来斜率是正的
Angle_rotate = 45 - abs(angle_hypot);
field_rotate = imrotate(field, angle_rotate);
结束
1评论
GMD俾路支
GMD俾路支 2019年4月19日
谢谢你的回答,但你没有明白我的意思,我有一个图片在附件中给出,我想提取白板的像素,然后想把它像一个矩形一样直

登录评论。


为副总经理
为副总经理 2022年4月20日
编辑:为副总经理 2022年4月20日
我知道这是一个死角,但是你可以使用像imwarp()这样的图像转换工具来进行透视修正。
A = imread(“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/214874/56260471_568057093678369_4947302863245148160_n.jpg”);
这些是方框角的坐标
您可以使用getpts()或impixelinfo()或datatips来获取这些
Boxm = [28 3;% [x y]
31日959;
1297 783;
1343 195);
断言这是他们应该在的地方
%定义矩形的任何坐标
Boxf = [30 30;% [x y]
30 900;
1300 900;
1300年30);
TF = fitgeotrans(boxm,boxf,“射影”);
outview = imref2d(size(A));
B = imwarp(A,TF,“fillvalues”, 255,“outputview”、官样文章);
imshow (B)
通常,最简单的方法是找到棋盘的边角,但由于它们是不可见的,只需选择定义一个四边形的点,这些点的边角显然与棋盘的边缘平行。
转换之后,您可以选择裁剪结果并进行进一步的后处理。我喜欢那种眩目的眼神,鬼魅,还有半干的马克笔留下的微弱痕迹。这提醒了我为什么我不能忍受白板。
B = imcrop(B,[14 33 1332 869]);收割它
B = imflatfield(B,40);试着去抑制强光
B = imadjust(B,[0.4 0.65]);%调整水平
imshow (B)
你也许可以用一些形态学运算来进一步清理它。压缩工件最终会成为一个限制因素。还有一些书面文本并不比幽灵文本更黑暗。
B = imbothat(B,ones(7)));
imshow (B)

s manbetx 845


释放

R2018b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!