Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)

实战 | Halcon实例转OpenCV实现-复杂背景下OCR数字识别(附源码)

作者头像
Color Space
发布于 2021-10-09 08:44:12
发布于 2021-10-09 08:44:12
2.5K0
举报

导读

本文主要介绍一个复杂背景下OCR数字提取识别实例,并将Halcon实现转为OpenCV。

实例来源

Halcon例程ocrcolor.hdev,例程代码精简修改如下:

代码语言:javascript
AI代码解释
复制
* Author: Color Space
* 来源-公众号:OpenCV与AI深度学习
*--------------------------------
dev_get_window (WindowHandle)
read_image (Image, '5.png')

decompose3 (Image, R, G, B)
trans_from_rgb (R, G, B, H, S, V, 'hsv')
threshold (B, Regions, 0, 240)
dilation_circle (Regions, RegionDilation, 4.5)
connection (RegionDilation, ConnectedRegions)

dev_display (Image)
select_shape (ConnectedRegions, SelectedRegions, ['width','height'], 'and', [25.86,80.71], [67.84,138.51])
sort_region(SelectedRegions, SortedRegions, 'first_point', 'true', 'column')

read_ocr_class_mlp ('Industrial_0-9_NoRej', OCRHandle)
do_ocr_multi_class_mlp (SortedRegions, B, OCRHandle, RecChar, Confidence)
area_center (SortedRegions, Area, Row, Column)
set_display_font (WindowHandle, 27, 'mono', 'true', 'false')
disp_message (WindowHandle, sum(RecChar), 'window', 32, 24, 'red', 'false')

实现效果:

OpenCV实现步骤与代码

实现步骤:

【1】分离RGB颜色通道,选择B(蓝色)通道处理;

【2】阈值处理,凸显出数字;

【3】形态学:膨胀 + 腐蚀 ->或直接闭运算,将数字轮廓断开部分连接

【4】轮廓筛选,剔除杂讯

【5】使用PaddleOCR或EasyOCR直接用以上步骤二值图识别。


逐步效果演示与代码:

完整源码:

代码语言:javascript
AI代码解释
复制
# Author:Color Space
# 来源-公众号:OpenCV与AI深度学习
# --------------------------------
import numpy as np
import cv2
import easyocr

reader = easyocr.Reader(['en'])
img = cv2.imread('2.png')
cv2.imshow('src', img)

B,G,R=cv2.split(img)

ret,thres= cv2.threshold(B, 230, 255, cv2.THRESH_BINARY_INV)
cv2.imshow('thres', thres)


k1=np.ones((11,11), np.uint8)
k2=np.ones((9,9), np.uint8)
thres = cv2.morphologyEx(thres, cv2.MORPH_DILATE, k1)
thres = cv2.morphologyEx(thres, cv2.MORPH_ERODE, k2)
cv2.imshow('morph', thres)
#cv2.imwrite('morph.jpg', thres)

contours,hierarchy = cv2.findContours(thres, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
rects = []
for cnt in contours:
  (x, y, w, h) = cv2.boundingRect(cnt)
  if w>200 or h > 200:
    #cv2.rectangle(img,(x,y),(x+w,y+h),(0,0,255),1)
    cv2.drawContours(thres,cnt,-1,(0,0,0),-1)
  if w > 10 and w < 70 or h > 50 and h < 90:
    cv2.drawContours(img,cnt,-1,(255,0,0),2)
#cv2.imwrite('morph.jpg', thres)

result = reader.readtext(thres)
if len(result) > 0:
  for i in range(0,len(result)):
    pt1 = (tuple(result[i][0][0]))
    pt2 = (tuple(result[i][0][1]))
    pt3 = (tuple(result[i][0][2]))
    pt4 = (tuple(result[i][0][3]))
    cv2.line(img,pt1,pt2,(0,0,255),2,cv2.LINE_AA)
    cv2.line(img,pt2,pt3,(0,0,255),2,cv2.LINE_AA)
    cv2.line(img,pt3,pt4,(0,0,255),2,cv2.LINE_AA)
    cv2.line(img,pt4,pt1,(0,0,255),2,cv2.LINE_AA)
    print(result[i][1])
    strText = result[i][1].replace(' ','')
    cv2.putText(img,strText,(pt1[0]+2,pt1[1]-5),0,1.0,(255,0,255),2)

else:
  print('have not found any text!')

cv2.imshow('result', img)
cv2.imwrite('result.jpg', img)

cv2.waitKey(0)
cv2.destroyAllWindows()
print ('finish')

原图:

RGB通道分离:

B通道阈值提取:

形态学膨胀腐蚀:

轮廓筛选识别:

更多图像测试验证:


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

本文分享自 OpenCV与AI深度学习 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
让OCR更简单 | PaddleOCR+OpenCV实现文字识别步骤与代码演示
本期将介绍并演示PaddleOCR+Python+OpenCV实现车牌识别、身份证信息识别和车票信息识别的步骤与效果。
Color Space
2021/03/10
10.1K2
Halcon转OpenCV实例--复杂背景下缺陷检测(附源码)
导读 本文主要介绍一个复杂背景下缺陷检测的实例,并将Halcon实现转为OpenCV。 实例来源 实例来源于51Halcon论坛的讨论贴: https://www.51halcon.com/foru
Color Space
2021/07/01
2.4K0
实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 代码)
【1】扩充图像。由于这里的只有部分圆弧,为方便后续检测圆和ROI截取,我们先将原图扩大:
Color Space
2024/05/22
2K0
实战 | OpenCV+OCR实现弧形文字识别实例(详细步骤 + 代码)
实战 | 粘连物体分割与计数应用(一)--基于形态学+连通域处理 Halcon/OpenCV实现比较
本文主要介绍基于基于形态学+连通域处理实现粘连物体的分割与计数方法,并对比Halcon与OpenCV实现差异。
Color Space
2021/11/04
6.9K0
OpenCV应用 | 计算两条曲线之间的最小距离(附源码)
导读 本文主要介绍使用OpenCV计算两条曲线之间的最小距离。 实现目标 【计算两条曲线之间的最小距离】 测试图像: 动态效果演示: 实现步骤与代码 实现步骤: ① 分别找到两条曲线的轮廓; ② 计算每条曲线轮廓点与另一条轮廓上点的距离; ③ 记录距离最小值与对应最小值时的点坐标; ④ 绘制结果。 代码实现与演示: # -*- coding: cp936 -*- import numpy as np import math import cv2 def cal_pt_distance(pt1,
Color Space
2021/09/15
4K0
OpenCV应用 | 计算两条曲线之间的最小距离(附源码)
实战 | 计算器/数码管OCR数字识别(附源码)
本文主要介绍一个计算器显示数字识别的OCR实例,基于OpenCV和EasyOCR/PaddleOCR。
Color Space
2021/12/10
4.6K0
实战 | 计算器/数码管OCR数字识别(附源码)
实战 | OpenCV+OCR实现环形文字识别实例(详细步骤 + 代码)
光学字符识别(OCR)场景中有很多特殊情况,比如噪声、脏污、倾斜、变形等,都会对识别造成影响。环形文字也是其中一种,我们通常不能直接识别它们,而是先将文字转换到水平方向,再做识别。如下图所示:
Color Space
2022/05/25
3.1K0
实战 | OpenCV+OCR实现环形文字识别实例(详细步骤 + 代码)
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
本文给大家分享一个电感元件定位实例,并附Halcon和OpenCV实现步骤和代码。
Color Space
2022/04/06
1.2K0
实战 | 电感元件定位--Halcon与OpenCV实现详解(附源码)
交流群里的两个实例--直接放源码了
本文主要介绍交流群里的两个实例,直接放源码。(公众号:OpenCV与AI深度学习)
Color Space
2022/09/26
7700
实战 | 粘连物体分割与计数应用(二)--基于距离变换+分水岭算法 Halcon/OpenCV实现比较
本文主要介绍基于基于距离变换+分水岭算法实现粘连物体的分割与计数方法,并对比Halcon与OpenCV实现差异。
Color Space
2021/11/15
8.9K0
实用技巧 | OpenCV快速计算直线/网格线交点坐标(附源码)
① 在知道直线方程的前提下(或知道直线上一点和直线角度),联立方程求解交点坐标(注意数学坐标系和图像坐标系的关系);
Color Space
2021/07/01
4.1K0
实用技巧 | OpenCV快速计算直线/网格线交点坐标(附源码)
Python-OpenCV(1)
本文介绍了如何使用Python和OpenCV库进行数字图像处理,包括图像的读取、显示、保存以及基本的图像处理操作,如直线、圆、矩形、椭圆的绘制,还有文字输入等。此外,还介绍了OpenCV中的绘图函数,包括直线、圆、矩形、椭圆等基本形状的绘制,以及输入文字的操作。
GavinZhou
2018/01/02
1.4K0
Python-OpenCV(1)
OpenCV检测轮廓极点(Python C++)
今天分享一个OpenCV检测轮廓极点实例,原图如下,我们需要检测出地图中最大轮廓的上下左右四个极点,并进行标注显示。
Color Space
2020/08/21
1.6K0
OpenCV检测轮廓极点(Python C++)
Halcon缺陷检测实例转OpenCV实现(二)
本期来用OpenCV实现Halcon中一个简单的PCB印刷缺陷检测实例。
Color Space
2020/12/22
1.6K0
Halcon缺陷检测实例转OpenCV实现(二)
opencv绘制直线
淼学派对
2023/10/14
4270
opencv绘制直线
OpenCV轮廓按面积大小排序(附Python/C++代码)
今天分享一个使用OpenCV给轮廓排序的例子,排序是依据轮廓面积的大小,当然你还可以改成其他的,比如宽高,长度等。
Color Space
2020/05/22
7.7K1
OpenCV4.5.1新增微信QRCode解码功能使用步骤与测评 附源码和效果视频
微信开源了QRCode解码功能,并可以在OpenCV中使用,本期将介绍使用步骤和效果演示。
Color Space
2021/02/07
7.9K7
基于OpenCV实现两种方法测量圆弧长度(步骤 + 代码)
要求:如上所示,分别用OpenCV计算出图1和图2中圆弧的长度。因为OpenCV中没有提供现成计算圆弧的方法,所以需要自己编写,本文将提供2种不同的方法来实现,仅供参考。
Color Space
2024/06/05
8680
基于OpenCV实现两种方法测量圆弧长度(步骤 + 代码)
[python opencv 计算机视觉零基础到实战] 十六、用opencv画画
我们在前两节中有了解使用OpenCV中的矩形绘制,接下来我们了解一下更多的图形绘制方法。我们在OpenCV中若需要绘制直线需要使用line方法,line方法的原型如下:
1_bit
2022/01/06
7310
[python opencv 计算机视觉零基础到实战] 十六、用opencv画画
Halcon转OpenCV实例--保险丝颜色识别(附源码)
实例来源于Halcon例程color_fuses.hdev--classify fuses by color
Color Space
2023/11/06
7790
Halcon转OpenCV实例--保险丝颜色识别(附源码)
推荐阅读
相关推荐
让OCR更简单 | PaddleOCR+OpenCV实现文字识别步骤与代码演示
更多 >
领券
社区新版编辑器体验调研
诚挚邀请您参与本次调研,分享您的真实使用感受与建议。您的反馈至关重要,感谢您的支持与参与!
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场