otsu算法_如何利用图像处理算法数清桌上的绿豆?

7月份的上海,不是梅雨就是艳阳天,今天的气温又直逼35度去了,如此炎热的夏天,来一碗冰凉的绿豆汤,岂不美哉?


Step1 准备原料

我们需要的原料有:

  • 绿豆:30g
  • 冰糖:适量
  • 清水:适量

绿豆30g,我突然发现家里竟然没有秤,本着工科生一如既往的严谨,绝不能随便抓一把就算了。

这有何难?于是经过小编查阅权威资料(百度),得到了一个绿豆的质量,大约为0.05g,那30/0.05=600,接下来,就是数出600颗绿豆就好了。

Step2 数绿豆

抓一把绿豆,撒在桌上:

13fe54b9ba69ba0520a5b3c533083ebd.png

桌上的绿豆,动手数一数

一个工科生应有的倔强,手数是不可能用手数的,用什么数呢?让计算机帮我数呀!说干就干,Let's Go!

  1. 导入依赖库
import numpy as npimport cv2import matplotlib.pyplot as pltfrom skimage.morphology import watershedfrom skimage.feature import peak_local_maxfrom scipy import ndimageimport decimal
  1. 读取图像,显示图片
def read_img(img_path):    '''    读取图片    @param img_path: 图片路径    '''    return cv2.imread(img_path)    def show(img):    '''    显示图片    @param img: cv2图片    '''    plt.imshow(img)    plt.show()# 显示原始图片beans_img = read_img('.cachebeans.jpg')show(beans_img[:, :, :: -1])  # 显示RGB格式
67656eb0631b8fdad077a7e92ba83947.png
  1. 处理图片
    • 将图片转换由RGB为HSV格式:
beans_hsv = cv2.cvtColor(beans_img, cv2.COLOR_BGR2HSV)show(beans_hsv)
e0335adce0769a9273328fd5ce018c6f.png
    • 二值化,通过选定的阈值将图像转换为二值图像(0或255):
h, s, v = cv2.split(beans_hsv)_, thr = cv2.threshold(s, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)show(thr)
715fa1acaee65893564b59aa5b5f5066.png
    • 中值滤波,删除图像中不必要的斑点():
blur = cv2.medianBlur(thr, 5)show(blur)
e48603781edd4b63f1f9d3494f816632.png
  1. 数绿豆
    • 通过轮廓检测和分水岭算法分别来数绿豆,并取均值来避免误差。
# 轮廓检测c, h = cv2.findContours(blur,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)beans_img2 = beans_img.copy()counts = []for i in c:    area = cv2.contourArea(i)    if area >200 :        counts.append(i)# 分水岭算法beans_img3 = wolfberry_img.copy()D = ndimage.distance_transform_edt(thr)localMax = peak_local_max(D, indices=False, min_distance=40,labels=thr)markers = ndimage.label(localMax, structure=np.ones((3, 3)))[0]labels = watershed(-D, markers, mask=thr)ws = len(np.unique(labels)) -1# 计算均值ans = decimal.Decimal((len(counts) + ws)/2)print("print("number of lemon segments detected = ", ans)show(copy2)= ", ans)show(copy2)

print输出:绿豆数量 = 56

47ed0608cd3b447d61df7a89b67d17c6.png

好了,用这个方法,循环几次,我们就能得到600颗绿豆。。。

Step3 煮汤

不要忘了,我们的目的是为了做一碗冰凉的绿豆汤~~

  1. 把绿豆放容器里
  2. 用水泡半小时
  3. 清洗干净过滤一下
  4. 锅里水烧开把绿豆倒进去
  5. 再次烧开后改中火慢慢熬,时不时的查看一下
  6. 30分钟后绿豆也差不多开花了,这时加入冰糖改小火再熬5分钟即可
  7. 想喝凉的就放冰箱冷藏一下
4955d2d9cb55b8c6893fba897207c6de.png

喝着这一碗冰凉的绿豆汤,这个夏天不再炎热了~~

18066fa2b1f0284dc019d4260fc3c7f7.png

参考阅读:

https://blog.csdn.net/hhhhhhhhhhwwwwwwwwww/article/details/106162289

https://www.toutiao.com/i6824878001772036620/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值