项目场景:

提取金属表面字符,即获取每个字符的位置区域。图中单个字符完整性不是很好,出现断开的现象。

二.解决方案:

1.图像预处理

2.全局二值化

3.Blob分析

三.halcon代码

read_image (Image, 'engraved')
gray_range_rect (Image, ImageResult, 7, 7)
threshold (ImageResult, Region, 128, 255)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1000, 99999)

四.核心算法解析

gray_range_rect(Image : ImageResult : MaskHeight, MaskWidth : )
算法功能:,在大小为(MaskHeight, MaskWidth)的矩形掩模内计算输入图像image的最大和最小灰度值的差值(max - min),并将结果值作为输出图像的像数值。
**Image **:原始输入图像
**ImageResult **:结果输出图像
MaskHeight:结果输出图像
**MaskWidth **: 矩形掩模的宽
LightDark:矩形掩模的高

c++实现源码:

//halcon gray_range_rect算子C++实现
void gray_range_rect(Mat &src, Mat &dst, Size size)
{//图像边界扩充int hh = (size.height - 1) / 2;int hw = (size.width - 1) / 2;cv::Mat Newsrc;cv::copyMakeBorder(src, Newsrc, hh, hh, hw, hw, cv::BORDER_REFLECT_101);//以边缘为轴,对称dst = cv::Mat::zeros(src.rows, src.cols, src.type());//遍历图像for (int i = 0; i < src.rows; i++){for (int j = 0; j < src.cols; j++){//uchar srcValue = src.at<uchar>(i, j);int minValue = 255;int maxValue = 0;for (int k = 0; k < hh; k++){for (int z = 0; z < hw; z++){int srcValue = (int)Newsrc.at<uchar>(i + k, j + z);minValue = minValue > srcValue ? srcValue : minValue;maxValue = maxValue > srcValue ? maxValue : srcValue;}}uchar diffValue = (uchar)(maxValue - minValue);dst.at<uchar>(i, j) = diffValue;}}
}

效果如下:和halcon几乎一致

Halcon金属表面字符提取(c++实现核心算子)相关推荐

  1. Halcon边缘检测Sobel、Laplace和Canny算子

    提示:文章参考了网络上其他作者的文章,以及相关书籍,如有侵权,请联系作者. 文章目录 前言 一.像素级边缘提取 1.经典的边缘检测算子 2.边缘检测的一般流程 3.sobel_amp 算子 参考文献 ...

  2. 使用Opencv进行轮廓检测,字符提取,简单的直方图字符识别!

    一.使用Opencv进行轮廓检测! 所需函数: 1. cvFindContours 函数功能:从二值图像中检索轮廓,并返回检测到的轮廓的个数 函数原型: int)  cvFindContours( C ...

  3. CCPD2019车牌提取和字符提取

    CCPD2019车牌提取和字符提取 最近有进行车牌识别的需要,故处理了CCPD2019的数据集,提取了车牌和数字字母汉字的字符. 一.CCPD数据集 关于CCPD的介绍可参考如下文章 CCPD车牌数据 ...

  4. Shell 语言--字符提取

    # Python 和 Perl 字符提取 在说shell 之前,我想有必要说一下其他语言的字符提取如python, perl 对于Python 来说,如果我想提取 "," 左边的字 ...

  5. 基于FPGA的车牌识别--字符提取

    基于FPGA的车牌识别--字符提取 # 欢迎添加QQ:2639406604一起交流 1 概述 对于对于识别车牌的重要一步是对车牌字符的提取.本节将在<基于FPGA车牌位置的定位>的基础上完 ...

  6. halcon粘连字符分割_机器视觉—字符识别之粘连字符分割识别

    粘连字符的分割有很多种方法: 第一种方法:利用阈值法提取联通区域,再利用形态学分离字符: 第二种方法:每个字符定义一个感兴趣区域: 第三种方法: 计算区域每列像素数目,由于不同字符之间连接部分非常狭窄 ...

  7. Halcon初学者知识 【11】自定义算子和应用实例

    1 算子的约定 halcon的自定义算子,包含如下格式: 算子名称 (图象变量-输入 : 图象变量-输出: 控制变量-输入 : 控制变量-输出 ) 要点是: 在HALCON的所有算子(系统算子,自定义 ...

  8. halcon模板匹配实践(1)算子参数说明与算子简介

    create_shape_model(Template : : NumLevels, AngleStart, AngleExtent, AngleStep, Optimization, Metric, ...

  9. HALCON检测字符日期

    这个例子展示了利用HALCON检测包装盒上面的数字日期,此示例演示了如何与自动文本读取器在双边过滤图像上细分酸奶盖的到期日期.具体解释见注释. * This example demonstrates ...

最新文章

  1. Xamarin.iOS编译时无法连接苹果系统
  2. c语言如何判断密码不同字符,C语言从文本文档读取字符串(用户名和密码验证)...
  3. c++开发教程之自定义类型的运算
  4. linux简单快速启用web
  5. 地图标绘软件_ArcGIS Pro 2.4 首次亮相,Indoors、Monitor、全新一代地图故事模板,新特性抢先看!...
  6. 微服务的时间和成本去哪儿了
  7. Python 数据分析三剑客之 Matplotlib(七):饼状图的绘制
  8. Java里的 for (;;) 与 while (true),哪个更快?
  9. 【nginx】nginx 原理
  10. WPF连接WF4的问题
  11. 重读《JavaScript DOM编程艺术》(第一版)
  12. App专项测试测试有哪些?
  13. Python之OpenGL笔记(31):扭动的软糖
  14. NXP JN5169 烧录器原理图(FT232RL,不带按键)
  15. 透过年报看区块链股的含金量:无一披露此业务营收 近5成停留在研究
  16. 微信小程序初级——快递查询(利用聚合数据接口开发)
  17. 推荐一款强大的在线编译器
  18. python 判断是否为中文
  19. python数据分析师前景及待遇怎么样_数据分析师未来五年发展前景怎么样?
  20. 安装JAVA SE 安装包

热门文章

  1. QT学习C++(17)
  2. Python学习-有道翻译实现post请求(Python自带模块))
  3. Flash WebGame 开发经验心得和PureMVC框架细说(转载)
  4. 计算机科技文化节宣传标语,科技文化节宣传口号
  5. 重磅 | 美格智能发布新一代5G CPE解决方案,构建大带宽5G FWA连接
  6. Python读取excel的全部sheet
  7. HTML期末大作业~ 大话西游之大圣娶亲电影4页面 ~学生网页设计作业源码(HTML+CSS+JS)
  8. 什么是nginx?什么是nginx的反向代理和正向代理又是什么?nginx反向代理的作用?
  9. C++动态生成二维和三维数组
  10. 14年来首次!巴菲特减持比亚迪H股 影响几何?