首先,我检测到图像右侧的20个黑框,然后将x和宽度添加到列表中:image = cv2.imread(args["image"])

gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

(_, thresh) = cv2.threshold(gray, 220, 255,cv2.THRESH_BINARY)

kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, 1))

closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)

dilation = cv2.dilate(closed,None,iterations = 5)

(_,contours,_)=cv2.findContours(dilation.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

sorted_rows = sorted(contours, key = cv2.contourArea, reverse = True)[1:21]

for idx,row in enumerate(sorted_rows):

(_x,y,w,h) = cv2.boundingRect(row)

rows.append([(y),(y+h)])

然后我检测到五列:(_, thresh) = cv2.threshold(gray, 127, 255,cv2.THRESH_BINARY)

closed = cv2.erode(thresh, None, iterations = 4)

(_,contours,_)=cv2.findContours(closed.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

sorted_cols = sorted(contours, key = cv2.contourArea, reverse = True)[1:6]

for col in sorted_cols:

# add to list

(x,y,w,h) = cv2.boundingRect(col)

cols.append([(x),(x+w)])

接下来,我分别按照x和y的位置对这两个列表进行排序:cols = sorted(cols, key = lambda x: x[0])

rows = sorted(rows, key = lambda x: x[0])

然后我遍历columns列表和rows列表来构建交叉点的坐标,在那里我可以找到五个复选框count_iterations = 0

for col in cols:

for row in rows:

count_iterations +=1

crop = image[row[0]:row[1], col[0]: col[1]]

denoised = cv2.fastNlMeansDenoisingColored(crop,None,10,10,7,21)

edges = cv2.Canny(denoised,220,250)

closed = cv2.dilate(edges, None, iterations = 1)

(_,contours,_)= cv2.findContours(closed.copy(),cv2.RETR_LIST,cv2.CHAIN_APPROX_SIMPLE)

checkboxes = sorted(contours, key = cv2.contourArea, reverse = True)[:5]

crdn_checkboxes = []

for check_box in checkboxes:

crdn_checkboxes.append(cv2.boundingRect(check_box))

最后,我按像素的位置对它们进行排序,最后选中它们的一个:crdn_checkboxes = sorted(crdn_checkboxes, key = lambda x: x[0])

for idx, crdn in enumerate(crdn_checkboxes):

x,y,w,h = crdn

check_box = crop[y:y+h,x:x+w]

check_box_img_gray = cv2.cvtColor(check_box, cv2.COLOR_BGR2GRAY)

(_, thresh) = cv2.threshold(check_box_img_gray,200,255,cv2.THRESH_BINARY)

height,width = thresh.shape[:2]

tot_px = height * width

checked_box = cv2.countNonZero(thresh) / float(tot_px)

if checked_box < 0.6:

print "Found"

python 扫描仪_基于Opencv和Python的多选扫描仪相关推荐

  1. opencv python考勤_基于opencv和dlib人脸识别的员工考勤系统

    已打包生成可执行文件exe,可直接下载运行,exe文件及代码均已上传到我的github,点击传送门,打包的具体过程及教程可见pyinstaller简明教程 WorkAttendanceSystem 一 ...

  2. python 摄像头录制帧率_基于opencv和python的可变帧速率IP摄像机视频记录

    首先,我想对我正在做的事情发表评论.在 我有一个IP摄像机通过一个带以太网线的路由器连接到我的网络(FOSCAM 9800p),我试图用RTSP协议录制一段视频.我未来的打算是用opencv在中间添加 ...

  3. python 检测图像圆弧_基于OpenCV和Python的图像圆弧检测

    尝试以下代码:它将检测所有圆.曲线和圆弧:int main() { //RANSAC //load edge image cv::Mat color = cv::imread("../cir ...

  4. python车辆检测_使用OpenCV和Python构建自己的车辆检测模型

    总览对智慧城市的想法感到兴奋吗? 您会喜欢本教程,内容是构建自己的车辆检测系统. 首先,我们将了解如何在视频中检测运动物体,然后再进入实践部分. 介绍 我喜欢智慧城市的想法.关于自动化智能能源系统,电 ...

  5. 【优秀课设】基于OpenCV的Python人脸识别、检测、框选(遍历目录下所有照片依次识别 视频随时标注)

    基于OpenCV的Python人脸识别.检测.框选 (遍历目录下所有照片依次识别 视频随时标注) 移步: https://blog.csdn.net/weixin_53403301/article/d ...

  6. 一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字。您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑

    一个基于OpenCV的Python程序,可以从摄像头捕获图像并识别简单数字.您可以根据需要进行调整,包括调整图像预处理和数字识别逻辑 import cv2 import numpy as np imp ...

  7. c++opencv汉字分割_基于OpenCV 的车牌识别

    车牌识别是一种图像处理技术,用于识别不同车辆.这项技术被广泛用于各种安全检测中.现在让我一起基于OpenCV编写Python代码来完成这一任务. 车牌识别的相关步骤 1.车牌检测:第一步是从汽车上检测 ...

  8. python实现流媒体传输_基于OpenCV的网络实时视频流传输的实现

    很多小伙伴都不会在家里或者办公室安装网络摄像头或监视摄像头.但是有时,大家又希望能够随时随地观看视频直播. 大多数人会选择使用IP摄像机(Internet协议摄像机)而不是CCTV(闭路电视),因为它 ...

  9. python读取视频流做人脸识别_基于OpenCV和Keras实现人脸识别系列——二、使用OpenCV通过摄像头捕获实时视频并探测人脸、准备人脸数据...

    基于OpenCV和Keras实现人脸识别系列手记: 项目完整代码参见Github仓库. 本篇是上面这一系列手记的第二篇. 在Opencv初接触,图片的基本操作这篇手记中,我介绍了一些图片的基本操作,而 ...

最新文章

  1. Ubuntu下允许Root用户直接登录图形界面
  2. linux 内核线程与普通进程的区别
  3. Linux 检查域名服务,linux上的域名服务
  4. 电脑怎么测试硬盘的读写速度_两块硬盘合二为一,电脑读写翻倍?这样的“好事”你必须得了解...
  5. java8 lambda maplist排序_「java8系列」流式编程Stream
  6. python矩阵变化_用numpy改变矩阵的形状
  7. 还在一个个复制数据?——今天教你控制台爬数据!
  8. 1)vmware station 14下安装linux系统
  9. 体验 Vista Speech Recognition,使梦想成为可能
  10. html5 input选择文件,input文件选择,限定文件类型。
  11. 计算机熵的定义是,信息熵
  12. 供应商太多,怎么才能高效比价?
  13. 各地前端工资是多少?三线城市的前端有多少
  14. Cython简单demo
  15. Holoview--Introduction
  16. 转:Redis监控技巧
  17. xt6使用技巧_凯迪拉克XT6:这几个“驾驶技巧”并不省油
  18. dapper mysql_.NET Core Dapper操作mysql数据库的实现方法
  19. 领导拒绝涨薪?我直接跳槽,涨薪6k
  20. 【呆子谈营销】:从街旁网的倒闭开始谈起

热门文章

  1. html文字...点击后全部显示,js 文字超出部分隐藏、点击显示更多示例
  2. 北语18春《计算机网络技术》作业4,北语18春《计算机网络技术》作业4
  3. Vim快速移动光标至行首和行尾
  4. 怎样把连续的多个commit整理成1个?
  5. 企业实战(Jenkins+GitLab+SonarQube)_02_Jenkins运行
  6. Excel VBA - 文件及目录操作
  7. css-背景图片和渐变
  8. mysql慢查询日志分析工具比较_MySQL慢查询日志总结 日志分析工具mysqldumpslow
  9. 子网规划与组网实验_【干货】从0到1,“大型WLAN组网”基础知识分享~
  10. python模块搜索路径_Python模块搜索路径