在OCR实际开发中,证件照采集角度有很大的偏差,需要将图片进行旋转校正,
在应用中发现应该加入高斯模糊,可以极大减少误差线条.
知道线条后 通过求斜率 得旋转角度 .(x1-x2)/(y1-y2)
结果还行吧 ! 当然还有直方图也可以判断,有待研究!
Hough变换是经典的检测直线的算法。其最初用来检测图像中的直线,同时也可以将其扩展,以用来检测图像中简单的结构。
OpenCV提供了两种用于直线检测的Hough变换形式。其中基本的版本是cv2.HoughLines。其输入一幅含有点集的二值图(由非0像素表示),其中一些点互相联系组成直线。通常这是通过如Canny算子获得的一幅边缘图像。cv2.HoughLines函数输出的是[float, float]形式的ndarray,其中每个值表示检测到的线(ρ , θ)中浮点点值的参数。下面的例子首先使用Canny算子获得图像边缘,然后使用Hough变换检测直线。其中HoughLines函数的参数3和4对应直线搜索的步长。在本例中,函数将通过步长为1的半径和步长为π/180的角来搜索所有可能的直线。最后一个参数是经过某一点曲线的数量的阈值,超过这个阈值,就表示这个交点所代表的参数对(rho, theta)在原图像中为一条直线。具体理论可参考这篇文章。
1 #coding=utf-8
2 import cv2 3 import numpy as np 4
5 img = cv2.imread("/home/sunny/workspace/images/road.jpg", 0)
6
7 img = cv2.GaussianBlur(img,(3,3),0)
8 edges = cv2.Canny(img, 50, 150, apertureSize = 3)
9 lines = cv2.HoughLines(edges,1,np.pi/180,118) #这里对最后一个参数使用了经验型的值
10 result = img.copy() 11 for line in lines[0]: 12 rho = line[0] #第一个元素是距离rho
13 theta= line[1] #第二个元素是角度theta
14 print rho 15 print theta 16 if (theta < (np.pi/4. )) or (theta > (3.*np.pi/4.0)): #垂直直线
17 #该直线与第一行的交点
18 pt1 = (int(rho/np.cos(theta)),0) 19 #该直线与最后一行的焦点
20 pt2 = (int((rho-result.shape[0]*np.sin(theta))/np.cos(theta)),result.shape[0]) 21 #绘制一条白线
22 cv2.line( result, pt1, pt2, (255)) 23 else: #水平直线
24 # 该直线与第一列的交点
25 pt1 = (0,int(rho/np.sin(theta))) 26 #该直线与最后一列的交点
27 pt2 = (result.shape[1], int((rho-result.shape[1]*np.cos(theta))/np.sin(theta))) 28 #绘制一条直线
29 cv2.line(result, pt1, pt2, (255), 1) 30
31 cv2.imshow('Canny', edges ) 32 cv2.imshow('Result', result) 33 cv2.waitKey(0) 34 cv2.destroyAllWindows()
观察前面的例子得到的结果图片,其中Hough变换看起来就像在图像中查找对齐的边界像素点集合。但这样会在一些情况下导致虚假检测,如像素偶然对齐或多条直线穿过同样的对齐像素造成的多重检测。
要避免这样的问题,并检测图像中分段的直线(而不是贯穿整个图像的直线),就诞生了Hough变化的改进版,即概率Hough变换(Probabilistic Hough)。在OpenCV中用函数cv::HoughLinesP 实现。如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#coding=utf-8
import
cv2
import
numpy as np
img
=
cv2.imread(
`"/home/sunny/workspace/images/road.jpg"`)
img
=
cv2.GaussianBlur(img,(
`3,
3),
0`)
edges
=
cv2.Canny(img,
50
`,
150, apertureSize` `=` `3
)`
lines
=
cv2.HoughLines(edges,
`1,np.pi
/180
,118
)`
result
=
img.copy()
#经验参数
minLineLength
=
200
maxLineGap
=
15
lines
=
cv2.HoughLinesP(edges,
`1,np.pi
/180
,80
,minLineLength,maxLineGap)`
for
x1,y1,x2,y2
in
lines[
`0`]:
cv2.line(img,(x1,y1),(x2,y2),(
`0,
255,
0),
2`)
cv2.imshow(
`'Result'`, img)
cv2.waitKey(
`0`)
cv2.destroyAllWindows()
参考:
https://blog.csdn.net/sunny2038/article/details/9253823
CODE GITHUB :
原网址: 访问
创建于: 2024-03-07 14:47:54
目录: default
标签: 无
未标明原创文章均为采集,版权归作者所有,转载无需和我联系,请注明原出处,南摩阿彌陀佛,知识,不只知道,要得到
java windows火焰图_mob64ca12ec8020的技术博客_51CTO博客 - 在windows下不可行,不知道作者是怎样搞的 监听SpringBoot 服务启动成功事件并打印信息_监听springboot启动完毕-CSDN博客 SpringBoot中就绪探针和存活探针_management.endpoint.health.probes.enabled-CSDN博客 u2u转换板 - 嘉立创EDA开源硬件平台 Spring Boot 项目的轻量级 HTTP 客户端 retrofit 框架,快来试试它!_Java精选-CSDN博客 手把手教你打造一套最牛的知识笔记管理系统! - 知乎 - 想法有重合-理论可参考 安宇雨 闲鱼 机械键盘 客制化 开贴记录 文本 linux 使用find命令查找包含某字符串的文件_beijihukk的博客-CSDN博客_find 查找字符串 ---- mac 也适用 安宇雨 打字音 记录集合 B站 bilibili 自行搭建 开坑 真正的客制化 安宇雨 黑苹果开坑 查找工具包maven pom 引用地 工具网站 Dantelis 介绍的玩轴入坑攻略 --- 关于轴的一些说法 --- 非官方 ---- 心得而已 --- 长期开坑更新 [本人问题][新开坑位]关于自动化测试的工具与平台应用 机械键盘 开团 网站记录 -- 能做一个收集的程序就好了 不过现在没时间 -- 信息大多是在群里发的 - 你要让垃圾佬 都去一个地方看难度也是很大的 精神支柱 [超级前台]sprinbboot maven superdesk-app 记录 [信息有用] [环境准备] [基本完成] [sebp/elk] 给已创建的Docker容器增加新的端口映射 - qq_30599553的博客 - CSDN博客 [正在研究] Elasticsearch, Logstash, Kibana (ELK) Docker image documentation elasticsearch centos 安装记录 及 启动手记 正式服务器 39 elasticsearch 问题合集 不断更新 6.1.1 | 6.5.1 两个版本 博客程序 - 测试 - bug记录 等等问题 laravel的启动过程解析 - lpfuture - 博客园 OAuth2 Server PHP 用 Laravel 搭建带 OAuth2 验证的 RESTful 服务 | Laravel China 社区 - 高品质的 Laravel 和 PHP 开发者社区 利用Laravel 搭建oauth2 API接口 附 Unauthenticated 解决办法 - 煮茶的博客 - SegmentFault 思否 使用 OAuth2-Server-php 搭建 OAuth2 Server - 午时的海 - 博客园 基于PHP构建OAuth 2.0 服务端 认证平台 - Endv - 博客园 Laravel 的 Artisan 命令行工具 Laravel 的文件系统和云存储功能集成 浅谈Chromium中的设计模式--终--Observer模式 浅谈Chromium中的设计模式--二--pre/post和Delegate模式 浅谈Chromium中的设计模式--一--Chromium中模块分层和进程模型 DeepMind 4 Hacking Yourself README.md update 20211011
Laravel China 简书 知乎 博客园 CSDN博客 开源中国 Go Further Ryan是菜鸟 | LNMP技术栈笔记 云栖社区-阿里云 Netflix技术博客 Techie Delight Linkedin技术博客 Dropbox技术博客 Facebook技术博客 淘宝中间件团队 美团技术博客 360技术博客 古巷博客 - 一个专注于分享的不正常博客 软件测试知识传播 - 测试窝 有赞技术团队 阮一峰 语雀 静觅丨崔庆才的个人博客 软件测试从业者综合能力提升 - isTester IBM Java 开发 使用开放 Java 生态系统开发现代应用程序 pengdai 一个强大的博主 HTML5资源教程 | 分享HTML5开发资源和开发教程 蘑菇博客 - 专注于技术分享的博客平台 个人博客-leapMie 流星007 CSDN博客 - 舍其小伙伴 稀土掘金 Go 技术论坛 | Golang / Go 语言中国知识社区
最新评论