首页 > 其他分享 >失败笔记本--OPENCV--001--202407

失败笔记本--OPENCV--001--202407

时间:2024-07-14 17:57:54浏览次数:11  
标签:阈值 -- cv2 OPENCV 001 THRESH 图像 轮廓 二值化

失败笔记本-OPENCV篇-001

项目场景:

今天研究一下用OPENCV基于轮廓分析查找数字,参考地址为:OpenCV案例|基于轮廓分析查找数字
实现的效果如下:
请添加图片描述


1.打开一张图片

步骤:

  • 首先呢还是丝滑小连招,打开图片,灰度化,二值化
  • 在opencv中使用imread打开图片,使用imshow展示图片,不过要注意在imshow后面要接着waitkey()
  • imread中其实可以选择用灰度打开,但是好像并不是实现灰度化还是需要色彩空间转换,使用cvtColor函数
  • 在二值化之前先模糊一下去噪,高斯模糊用的是GaussianBlur函数
  • 二值化这里用的是自适应二值化,adaptiveThreshold
    代码如下:
source = cv2.imread('001.png',cv.COLOR_BGR2GRAY)
gary_img = cv2.cvtColor(source,cv.COLOR_BGR2GRAY)
blurred_img = cv2.GaussianBlur(source,(7,7),0)

 # 应用自适应阈值二值化
max_value = 255
block_size = 13
constant = 21
result = cv2.adaptiveThreshold (gary_img, max_value, cv.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, block_size, constant)
  • 在这步操作中,最重要的就是自适应二值化操作了

cv2.adaptiveThreshold 函数是OpenCV中用于图像处理的自适应阈值二值化方法,以下是该函数的主要参数及其详细说明:
src:输入图像,必须为单通道灰度图像。
maxValue:满足条件的像素点赋予的最大值,通常为255。
adaptiveMethod:自适应阈值算法的选择:
cv2.ADAPTIVE_THRESH_MEAN_C:使用局部均值作为阈值。
cv2.ADAPTIVE_THRESH_GAUSSIAN_C:使用局部高斯加权均值作为阈值。
thresholdType:阈值类型:
cv2.THRESH_BINARY:如果像素值大于阈值,则输出255;否则输出0。
cv2.THRESH_BINARY_INV:如果像素值大于阈值,则输出0;否则输出255。
blockSize:用于计算局部均值或高斯加权均值的块大小。
C:常数项,用于从计算出的局部均值或高斯加权均值中减去,以得到最终的阈值


2.轮廓查找和分析

步骤:

  • 做完二值之后就是查找轮廓
  • 找完轮廓就可以对轮廓进行分析,筛选合适的面积、长度
  • 画出轮廓的外接矩形就OK

代码如下:

contours, _ = cv2.findContours(result, cv.RETR_LIST, cv.CHAIN_APPROX_NONE)
for contour in contours:
    area = cv2.contourArea(contour)
    length = cv2.arcLength(contour, True)
    if area > 120 and area < 700:
        if length > 88 and length < 200:
            rect = cv2.boundingRect(contour)
            cv2.rectangle(source, rect, (0, 0, 255), 1, 8, 0);
  • 在这里参考了大佬的博客:opencv——轮廓发现与轮廓(二值图像)分析
  • 查找轮廓这里返回的是所有轮廓和轮廓之间的关系
  • 分析轮廓的面积和长度都是常规操作,只不过是放在for循环中
  • 画外接矩形的时候,先boundingRect找到外接矩形的左上角坐标,宽和高

cv2.findContours 函数是OpenCV中用于在二值图像中查找轮廓的函数。其主要参数如下:
输入图像:这是必须的参数,通常是一个单通道的二值图像(即只有黑白两色的图像)。
前景对象和背景分别用非零像素和零像素表示。
轮廓检索模式:这个参数决定了如何存储和返回轮廓。常见的模式包括:
cv2.RETR_EXTERNAL:只检测最外层的轮廓。
cv2.RETR_LIST:检测所有轮廓,并将它们作为一个连续的列表返回。
cv2.RETR_TREE:检测所有轮廓,并建立一个层次结构,每个轮廓都有一个父轮廓。
轮廓近似方法:这个参数决定了如何简化轮廓。常见的方法包括:
cv2.CHAIN_APPROX_SIMPLE:只保留轮廓的端点,适用于大多数情况。
cv2.CHAIN_APPROX_SIMPLE:保留轮廓的端点和拐点,适用于需要精确轮廓的情况

cv2.boundingRect 函数的参数和返回值如下:
参数:
array:这是一个包含轮廓点的集合,通常通过cv2.findContours 函数获得。这个参数可以是二值图像中的轮廓点集合,也可以是灰度图像中的点集。
返回值:
函数返回四个值,分别是矩形的左上角坐标(x, y)以及矩形的宽(w)和高(h)。这些值表示一个最小外接矩形( minimum bounding rectangle),即用一个最小的矩形把找到的形状包起来。

总结:

openCV是没有HAOLCON好用啊,分析特征不是很直观,这会浪费一点时间
在001中,用到了以下算子:

cv2.adaptiveThreshold
cv2.findContours
cv2.contourArea
cv2.arcLength
cv2.boundingRect
cv2.rectangle

标签:阈值,--,cv2,OPENCV,001,THRESH,图像,轮廓,二值化
From: https://blog.csdn.net/weixin_47350740/article/details/140419923

相关文章

  • 【人工智能】Transformers之Pipeline(一):音频分类(audio-classification)
    ​​​​​​​目录一、引言 二、音频分类(audio-classification)2.1概述2.2技术原理2.2.1 Wav2vec2.0模型 2.2.1HuBERT模型2.3pipeline参数2.3.1pipeline对象实例化参数2.3.2pipeline对象使用参数 2.4 pipeline实战2.4.1指令识别(默认模型) 2.4.2 情......
  • JVM:SpringBoot TomcatEmbeddedWebappClassLoader
    文章目录一、介绍二、SpringBoot中TomcatEmbeddedWebappClassLoader与LaunchedURLClassLoader的关系一、介绍TomcatEmbeddedWebappClassLoader是SpringBoot在其内嵌Tomcat容器中使用的一个类加载器(ClassLoader)。在SpringBoot应用中,当你选择将应用打包成可执......
  • Spring:SpringBoot为什么可以使用Jar包启动
    SpringBoot之所以可以使用Jar包启动,主要得益于其内置的SpringBootMaven或Gradle插件,这些插件在打包过程中进行了一系列的特殊处理,使得打包出来的Jar文件不仅仅包含了应用的代码和资源,还包含了所有必需的依赖库(即所谓的“可执行的胖Jar”或“uber-jar”)。此外,Spr......
  • 华为云obs如何配置自定义域名
    上传pdf文件到华为云obs上后,得到的链接,如果直接访问都是下载文件,那么要如何实现访问链接直接预览文件呢。通过查看华为云的官方文档得知从2022年开始,华为云就不在支持直接访问实现预览了如何在浏览器中在线预览OBS中的对象?_对象存储服务OBS基于安全合规要求,华为云对象存储......
  • JVM:运行时数据区
    文章目录一、总览二、程序计数器1、介绍2、程序计数器在运行中会出现内存溢出吗?三、栈1、介绍2、栈帧的组成部分(1)局部变量表(2)操作数栈(3)帧数据(3)栈内存溢出(4)栈的默认大小3、本地方法栈四、堆内存1、介绍2、是不是当used=total=max的时候,堆内存就溢出了?3、堆大小五、方......
  • 【码题集】习题
    目录史莱姆融合松鼠接松果 新月轩就餐 史莱姆融合根据题意就是一道集合合并的题,所以要用并查集,不过最后我们要输出整个序列,所以要在合并的时候维护一个链表,以便最终合并成一个大集合的时候,输出整个链表就是答案。不过这里有一点要注意,就是我们在更新链表的时候是把......
  • MinIO - 服务端签名直传(前端 + 后端 + 效果演示)
    目录开始服务端签名直传概述代码实现后端实现前端实现效果演示开始服务端签名直传概述传统的,我们有两种方式将图片上传到OSS:a)前端请求->后端服务器->OSS 好处:在服务端上传,更加安全.坏处:给服务器带来压力.b)直接写在前端js代码中好处:效率高,不用给服务......
  • linux命令中arping的使用
    linux命令在线查询工具https://wheart.cn/onlinetools/linux_command/index.htmlarping通过发送ARP协议报文测试网络补充说明arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络......
  • Linux ---gcc
    c语言的链接类型:动态链接:ll/lib64/libc-2.17.so静态链接:ll/lib64/libc.aglibc-static安装-CSDN博客https://blog.csdn.net/itas109/article/details/104226783在Linux中下载c语言的静态库。gcctest.c-otest.s-static以静态链接的形式对程序进行编译。g++mytest.......
  • Hacknos-OS-Hax靶机
    靶机地址:https://www.vulnhub.com/entry/hacknos-os-hax,389/一、信息收集步骤一:导入并配置靶机为桥接模式而后开启...获取其MAC地址信息...如下:步骤二:主机发现nmap192.168.7.0/24对应靶机的MAC地址得到IP为192.168.7.204步骤三:端口扫描nmap-sV-p-192.168.7.204......