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

失败笔记本-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

  • 14
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值