利用Emgucv绘制条形码边框16(C#)

news2024/11/28 23:41:58

 EmguCV环境配置:

​​​​​​Emgu CV4图像处理之环境搭建1(C#)_emgucv 4.7-CSDN博客

本文测试环境:

win10  64位

vistual studio 2019  

Emgu CV 4.6.0

环境配置准备:

1 新增控制台项目,.net framework为4.7.2

2  把win-x64目录的native目录下的文件全部拷贝到项目的运行目录Debug目录下

3  项目选择x64

4 添加项目引用Emgu.CV.dll、Emgu.CV.Platform.NetFramework.dll、System.Drawing.dll和System.Runtime.InteropServices.RuntimeInformation.dll  

代码如下:

static void ReadMultiBarCode3(string imageFileName)
{
    Emgu.CV.Mat mat = Emgu.CV.CvInvoke.Imread(imageFileName);
    Mat gray_srvPic = new Mat();
    Emgu.CV.CvInvoke.CvtColor(mat, gray_srvPic, Emgu.CV.CvEnum.ColorConversion.Bgr2Gray);
    //compute the Scharr gradient magnitude representation of the images
    //in both the x and y direction using OpenCV 2.4
    IOutputArray dstX = new Mat();
    IOutputArray dstY = new Mat();
    Emgu.CV.CvInvoke.Sobel(gray_srvPic, dstX, DepthType.Cv32F, 1, 0, -1);
    Emgu.CV.CvInvoke.Sobel(gray_srvPic, dstY, DepthType.Cv32F, 0, 1, -1);
    
    //subtract the y-gradient from the x-gradient
    IOutputArray gradient = new Mat();
    Emgu.CV.CvInvoke.Subtract(dstX, dstY, gradient);
    
    Emgu.CV.CvInvoke.ConvertScaleAbs(gradient, gradient,1,0);
    IOutputArray gradientDst1 = new Mat();
    Emgu.CV.CvInvoke.Blur(gradient, gradientDst1, new Size(9, 9),new Point(-1,-1));
    IOutputArray gradientDst2 = new Mat();
    Emgu.CV.CvInvoke.Threshold(gradientDst1, gradientDst2, 100, 255, ThresholdType.Binary);

    IOutputArray kernel = new Mat();
    kernel=Emgu.CV.CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(3, 3), new Point(-1,-1));
    IInputOutputArray closed = new Mat();
    //closed = cv2.morphologyEx(thresh, cv2.MORPH_CLOSE, kernel)
    Emgu.CV.CvInvoke.MorphologyEx(gradientDst2, closed, MorphOp.Close, kernel, new Point(-1,-1), 1, BorderType.Default, new MCvScalar());


    //# perform a series of erosions and dilations
    //closed = cv2.erode(closed, None, iterations = 4)
    Emgu.CV.CvInvoke.Erode(closed, closed, null, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());

    //closed = cv2.dilate(closed, None, iterations = 4)
    Emgu.CV.CvInvoke.Dilate(closed, closed, null, new Point(-1, -1), 1, BorderType.Default, new MCvScalar());

    //Mat element = CvInvoke.GetStructuringElement(Emgu.CV.CvEnum.ElementShape.Rectangle, new Size(3, 3), new Point(-1, -1));
    //CvInvoke.Dilate(closed, closed, element, new Point(-1, -1), 4, Emgu.CV.CvEnum.BorderType.Default, new MCvScalar());

    //cnts = cv2.findContours(closed.copy(), cv2.RETR_EXTERNAL,
    //                        cv2.CHAIN_APPROX_SIMPLE)
    IOutputArray output1 = new Mat();
    VectorOfVectorOfPoint contours = new VectorOfVectorOfPoint();
    VectorOfRect hierarchy = new VectorOfRect();
    //查找轮廓
    CvInvoke.FindContours(closed, contours, hierarchy, Emgu.CV.CvEnum.RetrType.External, Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple);


    

    CvInvoke.Polylines(mat, contours, true, new MCvScalar(0, 255, 0), 5);

    CvInvoke.Imshow("after_pic", mat);

    CvInvoke.WaitKey(0);
}

主程序测试:

static void Main(string[] args)
{
    ReadMultiBarCode3("test.png");
    Console.ReadLine();
}

test.png图片如下:

运行结果如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2034596.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

minikube 实践练习

前言 我这里就简单跟着官方教程做了下练习 参考文档:https://v1-27.docs.kubernetes.io/zh-cn/docs/tutorials/hello-minikube/ 这里最重要的是,你需要提前配置好你的网络。 这个我教不了,之前发了篇帖子vmware实现科学上网审核不通过&…

ElasticSearch 全文检索相关性 算分

文章目录 相关性相关性Relevance相关性算法TF-IDFBM25 通过Explain查看TF-IDFboosting query 多字段查询 相关性dis_max query最佳字段查询multi_match querybest_fields最佳匹配字段most_fields 多数字段搜索cross_fields跨字段搜索 相关性 相关性Relevance 搜索的相关性算分…

Ubuntu 通过 docker 安装 Nginx 镜像 + 创建并运行 nginx01 容器

一、安装 nginx:精简版镜像 1. 查找有什么类型的 nginx 镜像 yammiemy-pc >/home/yammie $ docker search nginx 2. 下载精简版 nginx 镜像 yammiemy-pc >/opt $ docker pull nginx:alpine alpine: Pulling from library/nginx 46b060cc2620: Already exists 21af147…

【深度学习|目标跟踪】快速入门卡尔曼滤波!

卡尔曼滤波详解 申明一、什么是卡尔曼滤波1.1 卡尔曼滤波的使用场景1.2 卡尔曼滤波的定义 二、卡尔曼滤波公式详解(无推导)三、卡尔曼滤波的简单应用 申明 本博客参考了b站up主“华南小虎队”的卡尔曼滤波教学视频以及Lauszus Kristian Sloth Lauszus的卡…

联想Thinkpad驱动安装下载(官网的驱动下载)

联想Thinkpad驱动安装官网下载地址: 联想驱动管理_ThinkPad服务网站-联想服务 联想驱动管理 帮助您更快速准确的定位驱动 自动下载安装,安装驱动不求人 软件版本:V2.9.0719.1104 | 大小:5.7M最后更新:2021-07-21支持系统&#…

41.【C语言之外】聊聊Cheat Engine官方教程步骤6的思考

0.看前须知 有一定指针概念的基础 推荐阅读前几篇博文: 19.【C语言】指针(重难点)(A) 37.【C语言】指针(重难点)(B) 38.【C语言】指针(重难点&#xff09…

oracle的exp.exe、imp.exe在哪下载?

需要oracle账号 地址: Instant Client for Microsoft Windows (x64) 64-bit 下载这个工具包

开发一个能打造虚拟带货直播间的工具!

在当今数字化时代,直播带货已成为电商领域的一股强劲力量,其直观、互动性强的特点极大地提升了消费者的购物体验。 然而,随着技术的不断进步,传统直播带货模式正逐步向更加智能化、虚拟化的方向演进,本文将深入探讨如…

智慧景区系统开发功能定制

智慧景区系统开发功能定制是一项综合性服务,它涉及到利用云计算、物联网、AI监控等先进技术,通过互联网和移动互联网,实现景区智慧化管理和服务提升。 以下是智慧景区系统开发中应考虑的关键功能点: 游客服务平台:包…

23款奔驰E350eL升级原厂香氛负离子系统,保持一股高级的香味

相信大家都知道,奔驰自从研发出香氛负离子系统后,一直都受广大奔驰车主的追捧,香氛负离子不仅可以散发出清香淡雅的香气外,还可以对车内的空气进行过滤,使车内的有害气味通过负离子进行过滤,达到车内保持清…

“AI能不能代替某某职业”,到底谁在破防?

前几天,公司在午间分享时谈到一个有趣的辩题:“AI能不能代替产品经理”,不仅双方辩手打了个你来我往,就连下面的吃瓜群众也进入红温状态。 “AI能不能代替xx”已经成为一个普遍的话题,在某乎上随手一刷就是不同的职业…

Linux 利用 ftrace 分析内核调用

目录 一、概述二、ftrace 的使用1、常用信息2、指定 ftrace 跟踪器3、设置要跟踪的函数4、ftrace 的开关5、function 跟踪程序6、function_graph 跟踪程序7、函数过滤器8、跟踪事件 三、trace-cmd 的使用1、常见命令2、常用选项2.1 列出可用的追踪器2.2 跟踪特定进程的函数调用…

如何用剪映自动批量生成左右分屏的视频?

做tiktok中视频计划的朋友,应该都知道一种批量做号的模式,就是找一些热门视频作为左边主机视频,右边则放上一些减压类视频以保存画面的原创度,像下面这种。 这种视频是如何批量用剪映生成的呢? 一、准备好素材 下载好…

数据结构——栈的讲解(超详细)

前言: 小编已经在前面讲完了链表和顺序表的内容,下面我们继续乘胜追击,开始另一个数据结构:栈的详解,下面跟上小编的脚步,开启今天的学习之路! 目录 1.栈的概念和结构 1.1.栈的概念 1.2.栈的结构…

redis面试(十五)公平锁队列重排

队列重拍 先说一下当前的加锁状态 anyLock由客户端A持有队列中是客户端B、客户端C并且客户端B现在是排在头部 那么队列重拍就是队列中某个客户端长时间没有重新申请加锁,没有刷新分数,就会被队列中挤掉。 假设这个长时间没有加锁的客户端是B。 总结 …

C++ CMake FFmpeg配置

SDK下载 github 环境变量配置 cmake_modules/FindFFmpeg.cmake # This module defines the following variables: # # FFmpeg_FOUND - All required components and the core library were found # FFmpeg_INCLUDE_DIRS - Combined list of all components includ…

Dijkstra单源最短路径算法学习有感

认识Dijkstra 艾兹格维布迪克斯特拉(Edsger Wybe Dijkstra,/ˈdaɪkstrə/ DYKE-strə;荷兰语:[ˈɛtsxər ˈʋibə ˈdɛikstra] 1930年5月11日-2002年8月6日)是一位荷兰计算机科学家、程序员、软件工程师、系统科学…

(回溯) LeetCode 46. 全排列

原题链接 一. 题目描述 给定一个不含重复数字的数组 nums ,返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]示例 2:…

零基础学习Redis(1) -- Redis简介

Redis是一个在内存中存储数据的一个中间组件,可用作数据库或数据缓存,通常在分布式系统中使用 (不了解分布式? 点击传送) 1. Redis特性 在内存中存储数据,通过键值对的方法存储key为string,v…

[GYCTF2020]FlaskApp1

打开题目 简单的一个base64加解密小程序 查看提示,好像并没有什么用,题目是flask,可能是ssti模板注入 加密窗口{{77}},解密窗口e3s3Kzd9fQ ({{77}} 加密窗口没看到注入,解密窗口存在注入,是模板注入 读取文件内容&am…