摘要:前两天跟一个朋友吃饭,聊到他在做的图像识别测量雪深,对此深感兴趣,找时间就把了解一下。识别标杆上红色刻度的数量。读取图片首先,将红色部分提取,则需要将原图进行颜色空间转换,转换类型使用方法。是一种将色彩模型中的点在圆柱坐标系中的表示法。
前两天跟一个朋友吃饭,聊到他在做的图像识别测量雪深,对此深感兴趣,找时间就把 OpenCV 了解一下。
识别标杆上红色刻度的数量。
研究了一下午,话不多说,直接开始演示吧。
import cv2 # 读取图片 img = cv2.imread("./snow.jpeg")
首先,将红色部分提取,则需要将原图进行颜色空间转换,转换类型使用 BGR2HSV 方法。
HSV 是一种将RGB色彩模型中的点在圆柱坐标系中的表示法。H 为色相,是色彩的基本属性,S 为饱和度,V 为明度。
从网上查了下,红色区域的 H 值在 [0,10] 和 [170,180],使用 inRange 方法将红色范围内外的颜色区分开
hsv_img = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) mask1 = cv2.inRange(hsv_img, np.array([0, 70, 50]), np.array([10, 255, 255])) mask2 = cv2.inRange(hsv_img, np.array([170, 70, 50]), np.array([180, 255, 255])) mask = mask1 | mask2
mask 显示效果如下
此时,图像上除了刻度外,还有些地方呈现白色,需要将这些杂质过滤掉,同时也要将垂直部分的白色去掉,需要经过先膨胀再腐蚀再膨胀三个过程。为什么要这样呢?因为这样才能过滤掉杂质以及垂直方向的红线部分,以致达到效果,具体看下面的代码和图。
dilated = cv2.dilate(mask, cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3)), iterations=2) # 创建一个水平的结构元素,进行腐蚀和膨胀 hline = cv2.getStructuringElement(cv2.MORPH_RECT, (int(dilated.shape[1] / 32), 1), (-1, -1)) # 腐蚀掉多余的白色部分 temp = cv2.erode(dilated, hline) # 使白色部分膨胀 dst_img = cv2.dilate(temp, hline)
效果如下:
得到提取后的部分,发现还有一个问题,左右刻度有些连结在了一起,此时需要分割。分割的方式是先计算一下宽度,得出中点宽度值,在此原图对应的中点宽度画一条黑线(不过效率有点低啊
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/43624.html
摘要:时间永远都过得那么快,一晃从年注册,到现在已经过去了年那些被我藏在收藏夹吃灰的文章,已经太多了,是时候把他们整理一下了。那是因为收藏夹太乱,橡皮擦给设置私密了,不收拾不好看呀。 ...
摘要:纳入深度学习模型来进一步提升准确率只是时间问题,事实上,这个时间已经到来。最新版本支持基于深度学习的,准确率显著提高。该函数使用基于深度学习的文本检测器来检测不是识别图像中的文本区域。高效使用概率最高的文本区域,删除其他重叠区域。 By Adrian Rosebrock on September 17, 2018 in Deep Learning, Optical Character ...
摘要:行代码的人脸识别看了行的人脸识别一文后,简单尝试了一下,发现识别准确度不够。膜拜完大神,直接开干首先,安装以及相关依赖工具代码略作改动执行之后效果是这样的完美识别结论如果要做人脸识别的话,建议选择,而不要选择。 7行代码(OpenCV)的人脸识别 看了《7行Python的人脸识别》一文后,简单尝试了一下,发现识别准确度不够。原始图像如下: showImg(https://segment...
阅读 1597·2021-11-22 13:53
阅读 2832·2021-11-15 18:10
阅读 2734·2021-09-23 11:21
阅读 2466·2019-08-30 15:55
阅读 460·2019-08-30 13:02
阅读 738·2019-08-29 17:22
阅读 1607·2019-08-29 13:56
阅读 3441·2019-08-29 11:31