前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OCR笔记① | 环境配置与简单操作

OCR笔记① | 环境配置与简单操作

作者头像
量潮科技
发布2022-10-31 15:58:56
4810
发布2022-10-31 15:58:56
举报
文章被收录于专栏:量潮科技量潮科技

各位朋友大家好,我是CPP课题组的视觉工程师。这个系列的文章主要介绍计算机视觉尤其是OCR在经济类课题数据采集中的应用以及其实现方法。既是小教程又是学习笔记。

OCR(Optical Character Recognition,光学字符识别)是指电子设备(例如扫描仪或数码相机)用字符识别方法将形状翻译成计算机文字的过程。过程包括预处理—特征提取—分类—后期处理四个重要的环节。过程根据需求和采取的技术路线不同也会有不同。

CPP课题组的数据大量通过爬虫获得,爬取到的文字信息经过数据清洗之后可以利用。但爬取到的图片信息,如果不经过OCR就难以加以利用。例如下面图片中的信息:

环境配置:VisualStudio2015&OpenCV3.1.0

Microsoft Visual Studio(简称VS)是微软的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件开发过程中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。OpenCV的全称是:Open Source Computer Vision Library。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。

它轻量级而且高效——由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。VS和OpenCV大家也可以尝试最新的版本,我这里是为了和队友的版本保持一致,所以没有升级。首先安装VS,安装镜像文件可以从官网上找到,社区免费版已经足够用了。OpenCV相关配置,在网上可以很方便地找到教程,就麻烦大家自己动下手了,我只在这里特别提醒几点。

1. 使用镜像安装。未安装虚拟镜像则须下载再安装。安装时无需联网,速度较快。

2. OpenCV解压之后全项目组组统一解压路径,方便代码和工程项目互相转移。

3. 为了保证和他人写的代码兼容,在包含目录中多包含几个。

4. 配置时使用属性表,将属性表保存到方便找的路径。之后新建工程只需要载入已有属性表,无需再次配置。

5. 配置debugx64的属性表,并选择x64.

6. 安装和配置真的会花很长很长很长时间,请有耐心(^.^)

熟悉操作

//在工程目录下储存文件名为"1.jpg"的图像。#include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <cstdio> #include <iostream>using namespace cv; using namespace std;

int main(int argc, char* argv[]) {

Mat img = imread("1.jpg");

if(!img.data) {

cout << "no file";

return 0;

}

imshow("Original", img); //show the original image

waitKey(20000);

return 0; }

以上代码实现了读入图片并显示的简单的功能。

颜色空间

在图像显示中,最常用的颜色空间是RGB模型,显示原理非常容易被理解。而HSV模型,是进行图像分析时常用的颜色空间。RGB就是:红(Red)、绿(Green)、蓝(Blue)三种色光原色,是图像显示最直接的色彩表示方法。但RGB虽然表示直接,但是R、G、B数值和色彩的三属性没有直接的联系,不能揭示色彩之间的关系。所以在进行图像识别时,RGB模型就不是那么合适了。

HSV是指Hue(色相)、Saturation(饱和度)和Value(值)。

色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,品红为300°。

饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与白色混合的结果。其中光谱色所占的比例愈大,颜色接近光谱色的程度就愈高,颜色的饱和度也就愈高。饱和度高,颜色则深而艳。光谱色的白光成分为0,饱和度达到最高。通常取值范围为0%~100%,值越大,颜色越饱和。

明度V表示颜色明亮的程度,对于光源色,明度值与发光体的光亮度有关;对于物体色,此值和物体的透射比或反射比有关。通常取值范围为0%(黑)到100%(白)。RGB和CMY颜色模型都是面向硬件的,而HSV颜色模型是面向用户的。在进行颜色判定时,只需查HSV模型的颜色范围表就可以。

Mat imgHSV;cvtColor(img, imgHSV, COLOR_BGR2HSV);

填入参数CV_RGB2GRAY是RGB到灰度图像。

预处理:阀值化、滤波、图形学

阀值化处理图像方便进行进一步处理。参照蓝色的颜色范围进行阀值化处理。

int bLowH = 100;

int bHighH = 124;

int bLowS = 45;

int bHighS = 255;

int bLowV = 45;

int bHighV = 255;

Mat blue_imgThresholded;inRange(imgHSV, Scalar(bLowH, bLowS, bLowV), Scalar(bHighH, bHighS, bHighV), blue_imgThresholded); //阀值化处理图像

常用的滤波操作有中值滤波、均值滤波、双边滤波、高斯滤波等等。中值滤波和均值,滤波都会在不同程度上带来一些问题。在实际操作中,更多用到的是双边和高斯滤波。这里使用高斯滤波再阀值化来看一下效果。

Mat imgHSV, gauHSV;

Mat gau;

GaussianBlur(img, gau, Size(7, 7), 0, 0);//高斯滤波

cvtColor(img, imgHSV, COLOR_BGR2HSV);

cvtColor(gau, gauHSV, COLOR_BGR2HSV);

int bLowH = 100;

int bHighH = 124;

int bLowS = 45;

int bHighS = 255;

int bLowV = 45;

int bHighV = 255;

Mat blue_imgThresholded, gau_imgThresholded;inRange(imgHSV, Scalar(bLowH, bLowS, bLowV), Scalar(bHighH, bHighS, bHighV), blue_imgThresholded); //Threshold the image

inRange(gauHSV, Scalar(bLowH, bLowS, bLowV), Scalar(bHighH, bHighS, bHighV), gau_imgThresholded); //Threshold the image

imshow("Original", img); //show the original image

imshow("gau", gau); //show the original image

imshow("blue_imgThresholded", blue_imgThresholded); //show the original image imshow("gau_imgThresholded", gau_imgThresholded); //show the original image

这里要注意一下处理顺序。先对原图进行高斯滤波再转化为HSV图像。通俗的讲,高斯滤波就是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。这样可以有效地去除一些噪点,突出需要处理的部分。

图形学操作指腐蚀,膨胀,开操作,闭操作。从图像处理角度看,二值图像的腐蚀和膨胀就是将一个小型二值图,在一个大的二值图上逐点移动并进行“与”“或”逻辑运算,根据运算结果确定中心点的像素结果。膨胀是“或”运算,腐蚀是“与”运算。开操作是先腐蚀再膨胀,一般使对象的轮廓变得光滑,断开狭窄的间断和消除细的突出物。闭操作是膨胀再腐蚀可使轮廓线更光滑,但与开操作相反的是,闭操作通常消弥狭窄的间断和长细的鸿沟,消除小的空洞,并填补轮廓线中的断裂。

Mat element = getStructuringElement(MORPH_RECT, Size(4, 4));

Mat element2 = getStructuringElement(MORPH_RECT, Size(4, 4));

Mat imgDilate, imgErode, imgOpen, imgClose;

dilate(blue_imgThresholded, imgDilate, element2);//膨胀erode(blue_imgThresholded, imgErode, element2);//腐蚀morphologyEx(blue_imgThresholded, imgOpen, MORPH_OPEN, element);//开操作

morphologyEx(blue_imgThresholded, imgClose, MORPH_CLOSE, element);//闭操作

关于图形学的操作,在机械工业出版社的《计算机视觉》(2005.3)一书中的习题3.8介绍了齿轮检查的方法。不好意思版本有点旧,这里也不能整体搬运。有兴趣的朋友可以阅读一下相关的内容。后面有机会我复现一下相关操作再给大家介绍一下。

~关于OCR的内容后面还会持续更新~

~笔者水平有限~

文案/主堕妖

排版/芷若

China's Prices Project

微信号:XMUCPP2016

项目专栏:China's Prices Project- 知乎专栏

联系邮箱(项目负责人iGuo):

zhangguocpp@163.com

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量潮科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档