机器视觉之图像预处理

最近在做一个关于稻谷的检测计数的小软件,在制作的过程中对于图像的预处理环节看了许许多多的博客,看了许许多多的内容,于是,想把关于图像的预处理这一环节根据自己的实际需求进行一些介绍,其中也包括自己对于一些处理方法的自己理解和看法,希望大家可以一起共勉。

图像的预处理方式有许多种,灰度化或HSV、二值化、滤波,腐蚀膨胀,开运算,闭运算等等,那么就针对下图进行一个简单的预处理。

阈值二值化:阈值人为设置可能存在偏差,选择自适应阈值二值化方式:

由上图可知,我们拍摄的图片存在亮度不均匀的现象,第二张图片对于亮度的适应性较强,cv.THRESH_OTSU,阈值二值化方式较好,所以选择此种方式和此张照片进入下一步预处理。

滤波:有均值滤波、高斯滤波、中值滤波:

 由上图可以发现中值滤波的效果较好。 

之后对二值化图形进行参数提取,使用findCountours函数获取小麦的中点坐标以及最小矩形的长宽(这里代码表示水平方向的矩形,如果需要沿长轴方向的矩形,可以私聊),然后对小麦使用最小矩形进行框选,如下图所示:

可以看到图中部分区域识别不够清晰,需要进一步学习预处理操作。

这里得到右图之后可以对小麦进行计数,或者在countours元祖中对小麦参数进行提取操作,countours中有中心点坐标,最小矩形长宽比。

获得这些参数后可以对小麦进行分类操作、计数操作等等。

第一次写博客,记录一下!

欢迎咨询探讨。

import cv2 as cv
import numpy as np
image = cv.imread("C:/Users/rjx/Desktop/red.jpg")
image1 = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
h,w=image1.shape[:2]
m = np.reshape(image1,[1,w*h])
mean=m.sum()/(w*h)#图像中所有像素点的平均值
print('mean:',mean)

ret,i1 = cv.threshold(image1,mean,255,cv.THRESH_BINARY,0)#小于阈值置零,大于阈值置填充色
ret,i2 = cv.threshold(image1,mean,255,cv.THRESH_OTSU,1)#大于阈值置零,小于阈值置填充色
ret,i3 = cv.threshold(image1,mean,255,cv.THRESH_TOZERO,2)#小于阈值置零,大于阈值保持原色
ret,i4 = cv.threshold(image1,mean,255,cv.THRESH_TRUNC,3)#小于阈值保持原色,大于阈值置置灰色
cv.imshow("images_1", np.hstack([i1,i2,i3,i4]))
#简单的均值滤波,平均卷积操作
blur = cv.blur(i2,(3,3))
aussian = cv.GaussianBlur(i2,(5,5),1)            #类似于正态分布,中间值权重最大,周围值权重依次递减
median = cv.medianBlur(i2,5)                     #中值滤波,除去杂波首选,可以很好地去除噪声
cv.imshow("images_3", np.hstack([blur,aussian,median]))
cv.imshow('median',median)

contours,hierarchy = cv.findContours(median, cv.RETR_TREE, cv.CHAIN_APPROX_TC89_KCOS)  # 检测轮廓
print(type(contours))  #此处用来查看一下contours类型
for i, contour in enumerate(contours):  #遍历contours元祖中的参数
    x, y, w, h = cv.boundingRect(contour)  #contour为轮廓中点坐标,以及长宽
    cv.rectangle(image1, (x, y), (x + w, y + h), (0, 0, 0), 0)  #检测计算矩形参数,第一个参数为轮廓识别图像,第二个参数为矩形左下点坐标,第三个参数为矩形,第四个参数为线颜色,第五个参数为线粗细
    cv.drawContours(image, [contour], -1, 255, cv.FILLED)  #将矩形绘制在image上
cv.imshow('image',image)

cv.waitKey(0)
cv.destroyAllWindows()

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小孩兒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值