Opencv

2023-10-27

Opencv | 检测框线、模糊判断、计算图片相似度

开操作检测横竖线

    开操作是先选定合适结构元对图像进行腐蚀处理再用相同结构元对图像进行膨胀处理。开操作可以平滑物体轮廓,断开狭窄的间断和消除细小的突出物,它具有消除细小物体,在纤细处分离物体和平滑较大物体边界的作用。
    先说一下腐蚀和膨胀的数学表达,结构A被结构B腐蚀的定义为: A ⨀ B = z ∣ ( B ) z ⊆ A A⨀B={z|(B)z⊆A} AB=z(B)zA,可以理解为,移动结构B,如果结构B与结构A的交集完全属于结构A的区域内,则保存该位置点,所有满足条件的点构成结构A被结构B腐蚀的结果。
    结构A被结构B膨胀的定义为: A ⨁ B = z ∣ ( B ) z ⋂ A ≠ ∅ A⨁B={z|(B^)z⋂A≠∅} AB=z(B)zA=,可以理解为,将结构B在结构A上进行卷积操作,如果移动结构B的过程中,与结构A存在重叠区域,则记录该位置,所有移动结构B与结构A存在交集的位置的集合为结构A在结构B作用下的膨胀结果。
    在检测横竖线任务中,一般选用长方形形状的结构元对图像进行开操作,如选用(scale,1)或(1,scale)大小的结构元,通过改变scale的大小控制横竖线检出的数量,当scale越大时,横竖线检出数量越少(由腐蚀膨胀原理可知)。具体过程如下动图显示:
腐蚀
膨胀
最后结果:
开操作处理后

在Python中可用opencv进行处理:

rows, cols = img.shape
scale = 18
# 识别横线
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (cols // scale, 1))  # 返回指定形状和尺寸的结构元素
eroded = cv2.erode(img, kernel, iterations=1)
dilatedcol = cv2.dilate(eroded, kernel, iterations=1)

# 识别竖线
 kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (1, rows // (scale)))
 eroded = cv2.erode(img, kernel, iterations=1)
 dilatedrow = cv2.dilate(eroded, kernel, iterations=1)

拉普拉斯方差判断模糊度

    拉普拉斯算子可计算图像的二阶导,而我们知道,高阶导数可表征图像中颜色变化的强度,由此可检测出图像的边缘信息。图像越清晰时,包含的图像边缘信息越多,当图像越模糊时,高阶导数越小,由此可通过拉普拉斯算子来计算得到图像边缘强度值,之后将其方差作为判断图像模糊程度的变量。

var = cv2.Laplacian(img, cv2.CV_64F).var()   #该值越大图像越清晰

直方图统计判断图片相似性

    在项目中主要处理纸质版文件和电子版文件,由于电子版文件有一个具体的样式,其色度直方图相似度较高,由此将统计直方图信息作为判别电子版与纸质版的一个参考。

 avg_color_per_row = np.average(img, axis=0)
 avg_color = np.average(avg_color_per_row, axis=0)    #需计算电子版文件的avg_color范围来作为后面的判断边界
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Opencv 的相关文章

  • 搜索/替换 xml 内容

    我已经成功地使用 xml etree ElementTree 解析 xml 搜索内容 然后将其写入不同的 xml 然而 我只是处理单个标签内的文本 import os sys glob xml etree ElementTree as ET
  • 为什么Flask后台线程获取错误的数据库信息?

    为了将实时数据库信息推送到客户端 我在服务器端使用flask socketio 通过使用websocket将所有实时数据库信息推送到客户端 我的视图文件有一个片段 from models import Host from flask soc
  • 使用 cx_oracle 返回 MERGE 中受影响的行数

    如何在 CX Oracle 中执行 MERGE INTO sql 命令来获取受影响的行数 当我在cx oracle 上执行MERGE SQL 时 我得到的cursor rowcount 为 1 有没有办法获取受合并影响的行数 由于 cx o
  • 为什么 scikit-learn SVM.SVC() 非常慢?

    我尝试使用SVM分类器来训练大约10万个样本的数据 但我发现它非常慢 甚至两个小时后也没有任何反应 当数据集有大约 1k 个样本时 我可以立即得到结果 我还尝试了 SGDClassifier 和朴素贝叶斯 速度相当快 几分钟内就得到了结果
  • 如何为 PyYAML 编写代表程序?

    我想要一个自定义函数来序列化任意 python 对象 就像 json dump 函数有一个名为 default 的可选参数 如果对象不是 json 可序列化的 它应该是 json 转储器将调用的函数 我只是想从 json 包中执行相当于此操
  • 过滤给定范围内的坐标

    我有数百个带有地理位置的 out 文件 我将把它们批量导入到 SQLite 数据库中 但是 为了节省时间 我只会导入地理坐标在某些间隔内的线 文件是这样的 value value longitude latitude value value
  • python请求ssl握手失败

    每次我尝试这样做 requests get https url 我收到这条消息 import requests gt gt gt requests get https reviews gethuman com companies Trace
  • pip 升级到 pip 10.x.x 后解析需求文件的正确方法?

    所以今天我确实发现随着发布pip 10 x x the req软件包更改了其目录 现在可以在下面找到pip internal req 由于通常的做法是使用parse requirements功能在你的setup py从需求文件中安装所有依赖
  • Python httplib 和 POST

    我目前正在使用别人编写的一段代码 它用httplib向服务器发出请求 它以正确的格式提供所有数据 例如消息正文 标头值等 问题是 每次尝试发送 POST 请求时 数据都在那里 我可以在客户端看到它 但没有任何内容到达服务器 我已经阅读了库规
  • Spacy-nightly (spacy 2.0) 问题“thinc.extra.MaxViolation 大小错误”

    显然成功安装了 spacy nightly spacy nightly 2 0 0a14 和英语模型 en core web sm 后 我在尝试运行它时仍然收到错误消息 import spacy nlp spacy load en core
  • 如何隐藏 Tkinter python Gui

    有人知道如何隐藏 python GUI Tkinter 我已经创建了键盘记录器 对于 GUI 我使用了 python 模块 Tkinter 我想添加名为 HIDE 的按钮 因此当用户单击它时 它将隐藏 GUI 当用户按下 CTRL E 之类
  • 如何使用 opencv python 根据检测到的物体的位置生成其热图

    我需要根据对象的位置生成其热图 示例 视频帧中检测到的绿色球 如果它长时间停留在某个位置 那么该位置应该是红色的 并且球在短时间内经过的帧中的位置必须是蓝色的 这样我就需要生成热图 提前致谢 那么你在这里可以做的是 1 首先定义一个热图作为
  • tkinter 库 treectrl 转换为 exe 安装程序时出现 cx_freeze 错误

    我使用的是 python 版本 3 7 我使用了这个名为 treectrl 的外部库 当我运行 py 文件时它工作得很好 但是当我使用 cx freeze 转换为 exe 文件时 它给了我错误 NomodulleFound 名为 tkint
  • Python pandas:向我的数据框中添加一列来计算变量

    我有一个像这样的数据框 gt org group org1 1 org2 1 org3 2 org4 3 org5 3 org6 3 我想将列 count 添加到 gt 数据帧以计算组的成员数量 预期结果如下 org group count
  • Maya python 连接选择的属性

    我一直在尝试制作一个简单的脚本 它将采用两个视口选择 然后基本上将第二个视口的旋转连接到第一个 我不确定如何正确地从视口选择中为对象创建变量 这是我的尝试 但不起作用 import maya cmds as cmds sel cmds ls
  • print() 函数的有趣/奇怪的机制

    我正在学习Python 我目前正在学习如何定义自己的函数 并且在尝试理解返回值和打印它之间的区别时遇到了一些困难 我读到的关于这个主题的描述对我来说不太清楚 所以我开始自己尝试 我想我现在已经明白了 如果我没记错的话 区别在于你可以传递 a
  • 将音频添加到 OpenCV 生成的视频中

    我一直在使用python下的OpenCV http opencv willowgarage com documentation python index html从捕获设备录制视频 每小时写入两个输出 AVI 每小时开始时文件名都会更改 其
  • 从 python 安装脚本中的编译标志中删除 ppc

    我正在尝试在 Intel Mac OS X Leopard 计算机上安装 PIL 不幸的是 setup py build 认为它应该为 ppc 进行编译 gcc arch ppc arch i386 isysroot Developer S
  • 如何在 pandas 数据框中创建包含现有行字符串中的单词的新行?

    我有一个DataFrame in pandas有一个名为df strings与文本字符串 我想将这些字符串的各个单词放在自己的行上 并在其他列中使用相同的值 例如 如果我有 3 个字符串 以及一个不相关的列 时间 Strings Time
  • 一组不重叠整数范围的 Python 表示

    我想使用 Python 表示一组整数范围 其中可以动态修改该集合并测试包含情况 具体来说 我想将其应用于文件中的地址范围或行号 我可以定义我关心的地址范围 包括 200 400 450 470 700 900 然后我希望能够向集合添加一个可

随机推荐

  • Python中列表元素的操作(追加、插入、删除、赋值、排序、拷贝)

    一 列表元素的追加和插入 append 追加一个元素到列表 extend 列表拉伸 追加多个元素到列表 insert 在指定索引处插入元素 二 列表元素的删除 pop a 弹出列表中索引为a的元素 默认为列表最后一个元素 pop 弹出的值可
  • FreeRTOS创建动态任务(SRAM动态内存)

    动态内存的管理方法 在SRAM中定义一个大的数组 也就是堆内存 供FreeRTOS的动态内存分配函数使用 在第一次使用的时候 系统会将定义的内存进行初始化 这些代码在FreeRTOS提供的内存管理方案中实现 系统所有堆得大小 define
  • ndk-build配置、Android Studio jni的配置以及jni常见问题的解决

    最近项目用到了jni比较频繁 android studio 配置jni也是必须的 但不知道是不是运气问题 我在自己电脑使用jni一点问题都没有 可以说是无障碍 但是 一使用公司电脑配置就出现了一大片编译报错 编译不通过的问题 抱着不怕搞事情
  • 268道Go语言面试真题及详解+100例代码实例+DDD实践

    Go最近动静挺大的 刚刚发布的1 18包含以下几大特性 1 泛型 2 模糊测试 Fuzzing 3 工作空间 Workspaces 4 20 性能提升 Apple M1 ARM64 和 PowerPC64 用户开心了 由于 Go 1 17
  • SSH(ssh: connect to host localhost port 22: Connection refused)问题的解决

    centos默认并没有安装ssh服务 如果通过ssh链接centos 需要自己手动安装openssh server 判断是否安装ssh服务 可以通过如下命令进行 输入 ssh localhost 如果 输出 ssh connect to h
  • 如何使用计算机查询本机网卡信息,本机mac地址查询的三种方法

    现在电脑非常流行 大部分的学生以及白领或者说每一个家庭几乎都有一台电脑 不过大家对于电脑的认识却没有这么高的普及度 很多人对于它的了解仅仅停留在使用电脑看视频用软件的层面 对于电脑自身的认识不是很多 例如本机mac地址查询这个问题就难倒了很
  • ubuntu 12.04安装OpenGL

    安装 建立基本编译环境 首先不可或缺的 就是编译器与基本的函式库 如果系统没有安装的话 请依照下面的方式安装 sudo apt get install build essential 安装OpenGL Library 接下来要把我们会用到的
  • torchvision详细介绍

    前言 深度学习道路漫漫 唯有不断总结 脚踏实地才能造就一番就成 也不断勉励自己 不要放弃 相信自己可以的 共勉 torchvision简介 torchvision是pytorch的一个图形库 它服务于PyTorch深度学习框架的 主要用来构
  • 基础不牢地动山摇之IO流1(File、FilelnputStream、FileOutputStream)

    目录 文件与文件流理解 创建文件常用的三种方式 File构造方法 获取文件信息 目录的操作和文件删除 1 删除文件 2 删除目录 3 创建多级目录 IO流原理及流的分类 原理 分类 IO流体系图 常用的类 InputStream 字节输入流
  • matlab最小二乘法_最小二乘法原理详解

    本文是 Least squares approximation 的学习笔记 这个视频从线性代数的角度 对最小二乘法的原理讲解的通俗易懂 1 提出问题 如上图所示 A 是一个n行k列的矩阵 每行可以看作是一个观测数据 或者一个训练样本 的输入
  • 包区别 版本_Lerna-如何优雅地管理多个npm包

    关于 Lerna Lerna A tool for managing JavaScript projects with multiple packages lerna js org 对于 lerna 的两段描述 A tool for man
  • 锐捷路由技术系列

    1 锐捷路由技术 锐捷路由器基本功能的初始化配置 主机名 推荐配置 Ruijie config hostnameNAME txt 将设备命名为NAME txt 接口描述 推荐配置 XWRJ config interfaceinterface
  • Linux less命令和Linux head命令

    less 工具也是对文件或其它输出进行分页显示的工具 应该说是linux正统查看文件内容的工具 功能极其强大 less 的用法比起 more 更加的有弹性 在 more 的时候 我们并没有办法向前面翻 只能往后面看 但若使用了 less 时
  • python之类、对象详解,实例化代码示例,构造函数与析构函数,私有属性和方法

    世界万物节皆可分类 世界万物皆可对象 只要对象 肯定属于某种类 只要对象 肯定有属性 类 具有相同属性 方法对象的抽象 对象 类的实例化 每个对象可有不同属性 类的三大特性 封装 将数据方法放到类里 类就变成了一个胶囊或者容器 继承 一个类
  • 安装Cpython解释器(day02)

    安装Cpython解释器 Python解释器目前已支持所有主流操作系统 在Linux Unix Mac系统上自带Python解释器 在Windows系统上需要安装一下 具体步骤如下 1 1 下载python解释器 打开官网 https ww
  • Sql执行平时都很快但是偶尔就会很慢

    Sql执行平时都很快但是偶尔就会很慢 记录一下在翻看MySQL技术文章的资料 觉得很不错就自己记录一下 大部分来源于网络 SQL执行变慢的原因 一条Sql执行很慢 那是每次执行都慢还是偶尔慢 简单的总结一下 一 针对偶尔慢的原因 数据库在刷
  • 蓝桥杯零基础冲过赛-第22天

    注意 因为蓝桥杯大部分题目都会涉及到数据规模过大问题 所以大整数是解决数据规模过大的问题的其中一种最简便的方式 核心 竖式个位对齐原理 文章目录 大整数加法 大整数减法 大整数乘法 大整数除法 大整数余数 大整数加法 意义 因为数据类型有s
  • 摸鱼时间少? 是时候学会用Vue自定义指令进行业务开发了

    文章目录 前言 一 博主用Vue自定义指令在业务中实现了什么需求 1 首屏Loading切换指令 用来占位 支持调节Loading样式 2 复制指令 3 文件流形式下载后端数据 转blob下载 4 防抖 支持设置延迟时间 5 按钮或菜单权限
  • 永远怀念左耳朵耗子陈皓——IT界的失去

    2023年 中国IT界遭遇了一次巨大的损失 左耳朵耗子陈皓先生的离世让人震惊和悲伤 作为一位杰出的技术专家和开源倡导者 他为IT界做出了卓越贡献 本文将回顾他的职业生涯和他对IT界的重要影响 以及他离世后的深远意义 第一部分 IT界的璀璨明
  • Opencv

    Opencv 检测框线 模糊判断 计算图片相似度 开操作检测横竖线 拉普拉斯方差判断模糊度 直方图统计判断图片相似性 开操作检测横竖线 开操作是先选定合适结构元对图像进行腐蚀处理再用相同结构元对图像进行膨胀处理 开操作可以平滑物体轮廓 断开