目录
前言
这个其实是我上学期多媒体课的大作业(本文译自实验报告233),综合了网上一些零碎资料,谨以记录学习经历,如有错漏、不完善之处,请多多指正!
ps:文章框架参考了两篇博客,但是写的时候有点找不到了ORZ,要是有人发现雷同,帮忙找到文章,我会标记到文末,感激!
一、功能介绍
1.画板识别
(1)可以选择算法,默认为 CNN
(2)在“画板”模块处可以进行鼠标绘制,绘制时接近画板中央会效果更好
(3)点击按钮“画板识别”即可进行识别,结果会显示在“结果”处
(4)点击按钮“画板擦除”即可清空“画板”模块。
2.图片识别
(1)可以选择算法,默认为 CNN
(2)点击按钮“图像识别”可选择需要上传的图片,点击确认后进行识别,结果会显
示在“结果”处
二、UI设计
1.整体设计思想
画面简单干净,用户逻辑清晰。(划水)
2.颜色设计
采用了白+
蓝的基础设计思想,突出简单干净。(摸鱼)
3.Logo 设计
将猫咪和电脑结合,突出可爱和清爽。(某次PS课程作业)
4.按钮设计
圆滑边角,略微阴影,突出舒适干净。(随便找的模板)
三、算法介绍
1.图片预处理
(
1
)调用
cv2
库读入图片,用插值的方法统一
resize
为
960:640
的比例
(
2
)灰度化
(
3
)二值化
(
4
)放大轮廓,再除去噪点。
代码如下:
image = cv2.resize(img, (960, 640), interpolation=cv2.INTER_LINEAR)
# 将这帧转换为灰度图
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 二值化
retval, binary = cv2.threshold(gray, 90, 255, cv2.THRESH_BINARY_INV)
# 放大所有轮廓
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
cv2.drawContours(binary, contours, i, (255, 255, 255), 5)
# 过滤噪声点
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for i in range(len(contours)):
perimeter = cv2.arcLength(contours[i], False)
if perimeter < 100:
# print(s)
cv2.drawContours(binary, contours, i, (0, 0, 0), 15)
# cv2.imshow('binary_f', binary)
contours, hierarchy = cv2.findContours(binary, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
2.数字分割和显示
(
1
)遍历每个查到的轮廓,得到中心距,并画出绿色框图
(
2
)读取框图内的图片进行预测
(
3
)将预测结果显示在已画框图的中上位置
代码如下:
for i in ran