前端代码自动生成 之 opencv提取&机器学习分类
Posted DappWind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了前端代码自动生成 之 opencv提取&机器学习分类相关的知识,希望对你有一定的参考价值。
前端代码自动生成 之 opencv提取&机器学习分类
opencv提取图片中的矩形
opencv 提取图片中的矩形代码
import cv2 |
代码中的关键函数
找轮廓 findContours
findContours
找轮廓
https://docs.opencv.org/2.4/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours
本例中使用
# 边缘检测 |
最小外接矩形 minAreaRect
minAreaRect
最小外接矩形
rect = cv2.minAreaRect(c) #生成最小外接矩形 |
boxPoints 返回矩形坐标
cv2.boxPoints 返回的坐标顺序:注意
:需要注意的是,这个函数返回的坐标是没有严格顺序的,不能根据index来确定,所以取坐标位置时,要用min,max等函数
h = abs(box[3, 1] - box[1, 1]) |
image 裁剪图片
image[y:y+h, x:x+w]
因为因为boxPoints返回坐标点顺序是随机的,无法使用顺序计算,需要用min max 取一下
# 取出图片 |
截取的图片进一步处理
使用 ImageDataGenerator.flow
https://keras.io/api/preprocessing/image/
图片的shape是 (224, 224, 3)
flow输入要求为
NumPy array of rank 4 or a tuple. If tuple, the first element should contain the images and the second element another NumPy array or a list of NumPy arrays that gets passed to the output without any modifications. Can be used to feed the model miscellaneous data along with the images. In case of grayscale data, the channels axis of the image array should have value 1, in case of RGB data, it should have value 3, and in case of RGBA data, it should have value 4.
flow 要求的输入shape是4阶 NumPy array,python中 list 和 num array 是不一样的,所以
需要 np.array(croppedImage)
把list 转为 array
注意
:还有需要注意的一点是,ImageDataGenerator
返回的数组并不是按照输入的顺序,这点比较坑,需要用label传递对应关系。因为预测完后,还需要这个元素的坐标,才能正确对应。所以这里把坐标传到了label中,得到预期的对应关系。
# create a data generator |
加载训练好的模型
# 加载模型 |
结果
结果如下
待提高
可见识别准确度还有提高的空间,因为模型只训练了一次,数据也少,后续可以进一步提高模型的准确度。
代码
完整代码如下
https://github.com/yuxizhe/HTML-UI-datasets-generate/blob/master/cv%E5%90%8E%E5%88%86%E7%B1%BB.ipynb
以上是关于前端代码自动生成 之 opencv提取&机器学习分类的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV 例程200篇236. 特征提取之主成分分析(OpenCV)