opencv
使用opencv视觉方案识别电线颜色
轮廓识别
通常做法:
- 读取图像
- 灰度化
- 高斯模糊减少噪声
- canny算子轮廓检测
- findContours 寻找轮廓
- 遍历轮廓并画出最小外接矩形
img = cv2.imread("test.jpg")
# 等比缩放
img = cv2.resize(img, None, fx=0.2, fy=0.2)
# 灰度图
imgc = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 将灰度图像进行高斯模糊
imgc = cv2.GaussianBlur(imgc, (5, 5), 0) # 高斯模糊
# 进行轮廓的检测
canny = cv2.Canny(wirte_c1, 100, 200)
# 找到每个二值图像中的轮廓
contours = cv2.findContours(canny, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
颜色识别
通常做法:
- 读取图像
- 转化成HSV空间
- 定义颜色范围
- 使用cv2.inRange()函数 根据颜色范围进行二值化 获取mask
- findContours 寻找轮廓
- 遍历轮廓并画出最小外接矩形
img = cv2.imread("test.jpg")
# 等比缩放
img = cv2.resize(img, None, fx=0.2, fy=0.2)
# 转换为 HSV 色彩空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 定义黑色、白色和绿色的颜色范围
lower_green = np.array([0, 140, 0])
upper_green = np.array([130, 255, 255])
# 根据颜色范围,对图像进行二值化处理
mask_green = cv2.inRange(hsv, lower_green, upper_green)
# 找到每个二值图像中的轮廓
contours = cv2.findContours(mask_green, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
TODO
- [x] 1.识别框调小
- [x] 2.长宽防变换
- [x] 3.摄像头持续刷新
- [x] 4.flask增加:删除功能、重码检测、界面优化
- [x] 5.扫码验证API接口是否重复
- [x] 6.
(不行,底色相似只能2根线)轮廓识别demo
- [x] 7.电线色差调参
- [x] 8.限位:防止三根线任意调换(位置限制)
- [x] 9.改流程,扫码后按空格执行检测
- [x] 10. fix:程序检测完成后,全选条码方便进行下一个产品验证
- [x] 11. 绿线不在中间的逻辑会误判。(往上调整取景框)
- [x] 12. 两种产品使用不同的颜色参数
- [ ] n.待续...