我使用OpenCvSharp的一些坑,我的使用心得

2023-11-07

首先是关于 copyto 的操作郁闷
资源图片 需要 是正方形 或者 宽 大于高经我测试,长宽 大小的情况 还是需要跟背景有相应的一致性。比如如果背景 是长大于宽,则资源文件 也需要长大于宽,反之亦然。正方形的图片,则无此要求,要比背景图片小即可。

  1. 大图截小图的代码
  /// <summary>
        /// 
        /// </summary>
        /// <param name="src">传入需要操作(抠图)的图片</param>
        /// <param name="BackPath">背景图片地址</param>
        /// <returns></returns>

        public Bitmap GetImageByMat(Mat src, string BackPath)
        {
            //Mat src = new Mat("D://图片//测试//103.jpg", ImreadModes.Color);
            Mat Back = new Mat(BackPath, ImreadModes.Color);

            //Mat src = Cv2.ImRead("lenna.png", ImreadModes.GrayScale); 
            //Mat dst = src.CvtColor(ColorConversionCodes.BGR2GRAY);//新建一个掩码接收变成灰度图的滑稽(灰度处理)
            Mat dst1 = src.CvtColor(ColorConversionCodes.BGR2GRAY);//新建一个掩码接收变成灰度图的滑稽(灰度处理) 

            Mat dst2 = new Mat();
            //Cv2.Canny(src, dst, 50, 120);
            Cv2.Threshold(dst1, dst1, 168, 255, ThresholdTypes.BinaryInv);//灰度图二值化,高于240的变成黑色,其它白色
            int X = (Back.Width - src.Width) / 2;
            int Y = (Back.Height-src.Height) / 2;
            Rect rect = new Rect(X, Y, dst1.Cols, dst1.Rows);//复制到哪去
            Mat pos = new Mat(Back, rect);
            //dst2.CopyTo(PosMask);
            src.CopyTo(pos, dst1);//掩码黑色的区域不复制
            return BitmapConverter.ToBitmap(Back);
            //using (new Window("pos", pos))
            //using (new Window("Back image", Back))
            //using (new Window("dst1 image", dst1))

            using (new Window("dst2 image", dst2))
            //{
            //    Cv2.WaitKey();
            //}
        }

2.我的使用多线程摄像头操作:

  // Create class-level accesible variables
        VideoCapture capture;
        Mat frame;
        Bitmap image;
        private Thread camera;
        bool isCameraRunning = true;
        string Backpath;


        // Declare required methods
        private void CaptureCamera()
        {
            
            camera = new Thread(new ThreadStart(CaptureCameraCallback));
            camera.IsBackground = true;
            camera.Start();
        }

        private void CaptureCameraCallback()
        {

            frame = new Mat();
           //也可以写成capture = VideoCapture.FromCamera(CaptureDevice.Any);容易出现资源被占用的问题
           

            capture.Open(0);
            capture.Set(CaptureProperty.FrameWidth, 800);//设定摄像头图片的大小
            capture.Set(CaptureProperty.FrameHeight, 600);

            if (capture.IsOpened())
            {
                while (isCameraRunning)
                {

                    capture.Read(frame);
                    image = GetImageByMat(frame,Backpath);
                    if (PicMain.Image != null)
                    {
                        PicMain.Image.Dispose();
                    }
                    PicMain.Image = image;
                }
            }
        }
        public MainForm()
        {
            InitializeComponent();
            PicMain.SizeMode = PictureBoxSizeMode.Zoom;
            Backpath = @"./BackImage/back01.jpg";
        }
        /// <summary>
        /// 设置
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void PicSetUp_Click(object sender, EventArgs e)
        {

        }

其中适用的 mat 转换为 bitmap 方式为:

bitmap= BitmapConverter.ToBitmap(mat)

参考文件:http://www.srcmini.com/60008.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我使用OpenCvSharp的一些坑,我的使用心得 的相关文章

  • 通过命令行运行java文件(jar、class),以及生成一个简单的jar包

    最近在开发中涉及到了java文件的运行 踩了一些坑 简单记录一下 jar文件 在装有java的计算机中 要直接运行jar文件 可以用命令 java jar jarpath 若要指定运行类名 则用 java cp jarpath classn
  • PointNet家族

    点云数据的特性和挑战 1 点云具有不规则性 顺序不相关性 置换排序不变性对深度学习具有很大的挑战 Irregular unordered permutation invariance 2 刚性变换 scale transorfmation
  • 开源库生态与供应链论坛

    ChinaOSC 2022开源库生态与供应链技术论坛将于8月21日在陕西省西安高新国际会议中心召开 开源软件供应链管理是软件项目持续维护过程中的关键任务 本论坛邀请来自学术界和开源社区的专家分享开源三方库和供应链管理有关的学术研究成果和社区
  • SQL中的PowerDesigner逐步深入提问,你能掌握多少?

    你提到了有PowerDesigner操作经验 请解释一下PowerDesigner是什么 以及它在数据库设计和开发中的作用是什么 标准回答 PowerDesigner是一种数据库建模和设计工具 它用于创建数据库模型 设计表结构 定义关系和生
  • Python入门教程完整版(懂中文就能学会)

    今天给大家带来了干货 Python入门教程完整版 完整版啊 完整版 言归正传 小编该给大家介绍一下这套教程了 希望每个小伙伴都沉迷学习 无法自拔 本套教程学习时间15天 1 3天内容 为Linux基础命令 4 13天内容 为Python基础
  • Oauth2授权模式访问之客户端模式(client_credentials)访问

    Oauth3授权模式访问之客户端模式 client credentials 访问 使用POSTMAN获取token url上填写http localhost 8080 oauth token grant type client creden
  • confidence weighted learning

    这个算法原作者意思是在NLP中面对高维向量和数据稀疏时效果会不错 算法保持了当前预测向量w的均值和方差 并做优化 代码实现如下 cw learning algorithm def get phi confidence parameter p
  • 从数仓到数据中台,谈技术选型最优解

    本文根据颜博老师在 Deeplus直播第218期 线上分享演讲内容整理而成 文末有获取本期PPT 回放的途径 不要错过 颜博 马蜂窝数仓研发总监 现任马蜂窝数据仓库团队负责人 曾供职于京东 IBM 亚信等公司 数据行业老兵一名 历经传统数据
  • 2023年的C基础笔记

    头介绍 include
  • 《汇编语言(第四版)》---王爽 第一章 基础知识 详细笔记 ~后续章节笔记,课后检测,实验代码持续更新中

    汇编语言 第四版 王爽 第一章基础知识 汇编语言是直接在硬件之上工作的汇编语言 1 1 机器语言 机器语言就是机器指令的集合 机器指令展开来讲就是一台计算机可以正确执行的命令 早期的程序员进行纸带打孔 电子计算机的机器指令是一列二进制数字
  • 查看系统中支持CUDA的设备数量和属性---deviceQuery示例

    在你安装了CUDA显卡驱动之后 需要检测是否安装正确 或者需要查看系统中支持CUDA的设备数量和属性 可以通过SDK中的deviceQuery示例来查看 工程目录位置 C ProgramData NVIDIA Corporation CUD
  • 谈谈数据的增量更新

    谈谈数据的增量更新 在数据同步的过程中 必然会遇到数据增量更新的需求 但如果没有一个有效的数据增量更新的设计与机制 可能每次上游数据更新时 你都需要将全量的数据同步一遍 即使只有1 的数据发生了更新 全量数据同步在数据首次同步的时候是需要的
  • source insight3.5 unable to create the project directory file

    在开始 gt 解除锁定的工程就可以了
  • 基于Docker快速搭建Hadoop集群和Flink运行环境

    前言 搭建集群 环境升级 配置Hadoop 配置Flink 打包镜像 启动集群 前言 本文主要讲 基于Docker在本地快速搭建一个Hadoop 2 7 2集群和Flink 1 11 2运行环境 用于日常Flink任务运行测试 前任栽树 后
  • Socks5代理IP在跨境电商与游戏中的应用

    随着互联网的迅猛发展 网络已经成为人们日常生活不可或缺的一部分 在这个数字化时代 跨境电商和网络游戏产业蓬勃发展 但伴随而来的是网络安全的威胁与挑战 本文将介绍Socks5代理IP技术 探讨它在网络安全 跨境电商以及游戏中的关键作用 以确保

随机推荐

  • PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理

    相对于linux来说 udev还是一个新事物 然而 尽管它03年才出现 尽管它很低调 J 但它无疑已经成为linux下不可或缺的组件了 udev是什么 它是如何实现的 最近研究Linux设备管理时 花了一些时间去研究udev的实现 udev
  • make: *** No rule to make target `build‘, needed by `default‘. Stop.

    解决Centos7 解决安装Nginx编辑make make install的不成功 make No rule to make target build needed by default Stop 解决方案 1 安装下面配置 yum y
  • Qt信号与槽七种连接方式

    Qt信号与槽七种连接方式 1 F3 F4编辑 拖入按键 按F4选择按键部位 拖动按键部位至mainwindow界面空白位置 并按如下操作 图1 2 signal slots的Edit方式 如图2 图2 3 QT4下的方式 1 connect
  • 才华战胜资本,原创受到尊重(抄袭事件后续)

    你敢相信吗 别人剽窃了我的课程 居然还要告我侵犯对方名誉 吾本小镇做题家 侥幸考入理工大 水杉林赏二月兰 梧桐树下闻桂花 感恩福报996 披星戴月写代码 专利 软著 写博客 半个嵌入式专家 穿上长衫笑寒酸 脱下长衫忙油盐 ad PCB 嘉立
  • 【OpenCV4】使用 normalize() 进行归一化(c++)

    函数原型 void cv normalize InputArray src InputOutputArray dst double alpha 1 double beta 0 int norm type NORM L2 int dtype
  • iptables详解及应用(史上最全)

    1 1 iptables概念 从逻辑上讲 防火墙可以大体分为主机防火墙和网络防火墙 主机防火墙 针对于单个主机进行防护 网络防火墙 往往处于网络入口或边缘 针对于网络入口进行防护 服务于防火墙背后的本地局域网 网络防火墙和主机防火墙并不冲突
  • matplotlib绘制柱状图(普通、堆叠、左右分布)

    文章目录 1 堆叠图 2 左右图 示例代码 3 堆叠 左右 示例代码 不论是堆叠 还是左右分布 其实他们都是柱状图bar 只是根据参数的不同 有不同的显示位置 多个bar呈现在一起就看上去像是堆叠起来 或是左右分布了 因此只需要控制bar的
  • Python3学习(七):模块

    Python3 模块 把一些可以反复使用的代码存放在文件中 为一些脚本或者交互式的解释器实例使用 这个文件被称为模块 模块是一个包含所有你定义的函数和变量的文件 其后缀名是 py 模块可以被别的程序引入 以使用该模块中的函数等功能 类似于C
  • JVM 如何自动完成垃圾回收

    一 简介 思考一个问题 在 java 里面我们 new 一个对象 等到程序结束后 这个对象就被自动回收了 完成这项工作只需要确定 哪些内存需要回收 什么时候回收 如何回收 接下来我们详细的解释下这三个问题 二 哪些内存需要回收 由于程序计数
  • 判断大小端存储两种办法

    1 强制转换 给定 int类型的变量a 赋值为1 1的16进制为 00 00 00 01 若小端存储则a中存储为 01 00 00 00 大端存储为 00 00 00 01 则可以取出a的地址强转为char 类型 char a来判断值为0
  • 2023最新最全git安装教程,保姆级手把手式安装!!!

    目录 一 git简介 二 安装过程 1 首先进入git的官网 https git scm com 然后选择Downloads 2 接着选择与自己电脑系统对应的下载选项 我的电脑是windows7的系统 因此选择windows 3 进去之后
  • [导入]TOMPDA WAP新闻订阅教程

    要浏览本条信息请点击文章标题 文章来源 http www wapkf com article other wap 2006 20060511241 html 转载于 https www cnblogs com 200831856 artic
  • 有哪些值得推荐的好用视频剪辑软件?

    首先 我们不管是工作需要 还是做自媒体 一款用着顺手的视频剪辑软件必不可少 经常看到很多人说我是小白 但又想学习视频剪辑 该如何选择适合自己的视频剪辑软件呢 看到抖音 小红书里面很多有意思的视频 自己也想剪辑试试 但又不知从何下手 话不多说
  • HuggingFace——Accelerate的使用

    Overview Accelerate is a library that enables the same PyTorch code to be run across any distributed configuration by ad
  • 20171207编写一个程序,只接受正整数的输入,然后显示所有小于或等于该数的素数。

    素数 在大于1的整数中 只能被1和这个数本身整除的数 思路 用一个标志sign 来标记出素数 include
  • flink学习40:tableAPI的扫描、投影、过滤、列操作

    from用法 select用法 as用法 where用法 filter用法 列操作 增 删 改
  • 【单例模式】

    单例模式 单例模式常见的几种方法 饿汉式 懒汉式DCL 懒汉式内部类 单例模式常见的几种方法 饿汉式 饿汉式 private final static SingletonPattern singletonPattern new Single
  • centos7 升级openssl1.1.1g、openssh8.6p1小记

    系统版本 CentOS Linux release 7 6 1810 Core 默认版本 OpenSSH 7 4p1 OpenSSL 1 0 2k fips 升级版本 OpenSSH 8 6p1 OpenSSL 1 1 1g 1 安装步骤
  • windows10中安装ubuntu双系统时出现unable to find a medium containing a live file system解决办法

    在ubuntu官网上下载最新的18 04 1LTS版本 通过rufus软件将其写入U盘中 但在电脑安装时出现如下错误 经搜索得到如下信息 原贴链接 只需在安装进行到如下界面时 拔掉U盘再插上即可解决问题
  • 我使用OpenCvSharp的一些坑,我的使用心得

    首先是关于 copyto 的操作郁闷 资源图片 需要 是正方形 或者 宽 大于高经我测试 长宽 大小的情况 还是需要跟背景有相应的一致性 比如如果背景 是长大于宽 则资源文件 也需要长大于宽 反之亦然 正方形的图片 则无此要求 要比背景图片