quagga相关代码的阅读

最近的工作涉及到了rip和ospf两个相关的协议,虽然仅仅是修两个bug,但是个人还是对这两个协议是如何实现的产生了很浓厚的兴趣。因此,就抽了一段时间读了一下quagga的源码。

相比于我之前读的ovs相关的代码,quagga的代码简单了不少,毕竟可供参考的资料太多了。大致花了一个月的空闲时间读完了rip和ospf的源码(其他协议没用到,也就没有读了)。真的如果静下心来的话,估计10来天就够了。

首先要说的是,rip和ospf都是单线程程序,通过和zebra进行通信来设置相关的路由信息。所以还是很好读的。

至少在读代码之前,你要先了解一下相关的协议,比如读rip之前,要先对这个rip这个协议有一个很好的认识,只要对协议有一个比较清楚的认识,知道协议每一步要干什么,那么读起代码来就很顺畅了,毕竟代码只是协议的翻译而已。

关于这两个协议,比较推荐的书籍是思科的,比如tcp/ip路由技术(第一卷),rip这么简单的协议就不讲了,ospf这个东西比较复杂,读这本书可能还有些困难,特别推荐51上面的一个视频 https://edu.51cto.com/course/709.html。这个基本将ospf讲的深入浅出了,对照着书籍,然后琢磨着代码,可以很快的就将代码中的难点一一扫除。

另外还需要推荐http://ccietea.com/
可以到里面找一些ospf以及其他协议的资料,讲的不错.

quagga的代码写的挺清晰易懂的。希望大家也可以和我一样,从中学到很多东西。

放上一份带了注释的源码(其实就ospf有比较详细的注释):
https://github.com/lishuhuakai/quagga_reading

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Quagga是一个开源的条形码识别库,可以识别多种类型的条形码,包括EAN、UPC、Code 128等。 以下是使用Quagga识别临时图片上的条形码的完整代码示例: ```python import cv2 import numpy as np import quagga # 读取图片 img = cv2.imread('barcode.jpg') # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 进行二值化处理 ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY) # 查找轮廓 contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE) # 循环遍历轮廓 for cnt in contours: # 计算轮廓的周长 perimeter = cv2.arcLength(cnt, True) # 进行逼近轮廓 approx = cv2.approxPolyDP(cnt, 0.02 * perimeter, True) # 如果轮廓有四个点 if len(approx) == 4: # 将轮廓进行透视变换 rect = cv2.minAreaRect(cnt) box = cv2.boxPoints(rect) box = np.int0(box) # 提取条形码区域 barcode = img[min(box[:, 1]):max(box[:, 1]), min(box[:, 0]):max(box[:, 0])] # 将条形码区域转换为灰度图像 barcode_gray = cv2.cvtColor(barcode, cv2.COLOR_BGR2GRAY) # 进行条形码识别 decoded = quagga.decode(barcode_gray) # 输出识别结果 print(decoded) # 显示图像 cv2.imshow('image', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 上述代码中,首先读取图片并进行灰度化和二值化处理,然后查找轮廓并进行逼近,如果轮廓有四个点,则进行透视变换,提取条形码区域,并对其进行灰度化和识别,最后输出识别结果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值