当前位置: 首页 > article >正文

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色

安装 Install-Package OpenCvSharp4
Install-Package OpenCvSharp4.Windows

普通实现

using System;
using System.Collections.Generic;
using System.Linq;
using OpenCvSharp; // 添加OpenCV引用class Program
{static void Main(string[] args){// 原有代码...// 添加圆形遮罩处理图像的示例ProcessImageWithCircleMask("input.jpg", "output.jpg", 300, 300, 200);}// 处理图像,将不在圆范围内的点变为黑色static void ProcessImageWithCircleMask(string inputPath, string outputPath, int centerX, int centerY, int radius){try{// 读取图像using (Mat src = Cv2.ImRead(inputPath)){if (src.Empty()){Console.WriteLine("无法读取图像!");return;}// 创建一个与原图像大小相同的黑色图像using (Mat result = Mat.Zeros(src.Size(), src.Type())){// 遍历图像中的每个像素for (int y = 0; y < src.Height; y++){for (int x = 0; x < src.Width; x++){// 计算点到圆心的距离double distance = Math.Sqrt(Math.Pow(x - centerX, 2) + Math.Pow(y - centerY, 2));// 如果点在圆内,保持原色;否则为黑色if (distance <= radius){// 获取原图像的像素值并设置到结果图像中Vec3b color = src.Get<Vec3b>(y, x);result.Set(y, x, color);}}}// 保存结果图像Cv2.ImWrite(outputPath, result);Console.WriteLine($"处理完成,结果已保存到 {outputPath}");}}}catch (Exception ex){Console.WriteLine($"处理图像时出错: {ex.Message}");}}// 生成随机坐标点static List<Point> GenerateRandomPoints(int count, int minX, int maxX, int minY, int maxY){// 原有代码...}// 其他原有方法...
}// 原有类定义...

如果你想要更高效的实现,可以使用OpenCV的内置函数:

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace resistanceWelding
{class testOpencv{public static void ProcessImageWithCircleMaskEfficient(string inputPath, string outputPath, int centerX, int centerY, int radius){try{// 读取图像using (Mat src = Cv2.ImRead(inputPath)){if (src.Empty()){Console.WriteLine("无法读取图像!");return;}// 创建一个与原图像大小相同的黑色掩码using (Mat mask = Mat.Zeros(src.Size(), MatType.CV_8UC1)){// 在掩码上绘制白色圆形Cv2.Circle(mask, new Point(centerX, centerY), radius, Scalar.White, -1);// 创建结果图像using (Mat result = new Mat(src.Size(), src.Type(), Scalar.Black)){// 使用掩码将原图像复制到结果图像src.CopyTo(result, mask);// 保存结果图像Cv2.ImWrite(outputPath, result);Console.WriteLine($"处理完成,结果已保存到 {outputPath}");}}}}catch (Exception ex){Console.WriteLine($"处理图像时出错: {ex.Message}");}}}
}

类型转换

需要安装   OpenCvSharp4.Extensions

using Cognex.VisionPro;
using Cognex.VisionPro.ImageFile;
using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;namespace resistanceWelding
{class testOpencv{public static void ProcessImageWithCircleMaskEfficient(string inputPath, string outputPath, int centerX, int centerY, int radius){try{int dd = 2;Mat src;if(dd == 22){// 读取图像src = Cv2.ImRead(inputPath);}//else if(dd == 1)//{//    CogImageFile cogImage = new CogImageFile();//    cogImage.Open(inputPath, CogImageFileModeConstants.Read);//}else{var originalBitmap = new System.Drawing.Bitmap(inputPath);src = OpenCvSharp.Extensions.BitmapConverter.ToMat(originalBitmap);}if (src.Empty()){Console.WriteLine("无法读取图像!");return;}// 创建一个与原图像大小相同的黑色掩码Mat mask = Mat.Zeros(src.Size(), MatType.CV_8UC1);// 在掩码上绘制白色圆形Cv2.Circle(mask, new Point(centerX, centerY), radius, Scalar.White, -1);// 创建结果图像Mat result = new Mat(src.Size(), src.Type(), Scalar.Black);// 使用掩码将原图像复制到结果图像src.CopyTo(result, mask);// 保存结果图像Cv2.ImWrite(outputPath, result);Console.WriteLine($"处理完成,结果已保存到 {outputPath}");}catch (Exception ex){Console.WriteLine($"处理图像时出错: {ex.Message}");}}}
}

C# 图像之间转换代码_c# bitmap.palette-CSDN博客

//转为 bitmap方法一:
Bitmap map = OpenCvSharp.Extensions.BitmapConverter.ToBitmap(mat);
process_pictureBox.Image = map;

//转为 bitmap方法二:

Bitmap map = new Bitmap(mat.ToMemoryStream());
process_pictureBox.Image = map;


//Image img 转为Mat
Bitmap bitmap = new Bitmap(img);//Image img
OpenCvSharp.Mat mat = OpenCvSharp.Extensions.BitmapConverter.ToMat(bitmap);//用
 
//bitmap转换为mat
C#中Bitmap 与 Image 之间的转换
Image img = pictureBox1.Image;
Bitmap map = new Bitmap(img);
 
//而Bitmap直接可以赋值 给 Image 对象
 
Image img = Bitmap;

相关文章:

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色 安装 Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.Windows 普通实现 using System; using System.Collections.Generic; using System.Linq; using OpenCvSharp; // 添加OpenCV引用…...

基于SSM + JSP 的图书商城系统

基于SSM的图书商城 网上书城、图书销售系统、图书销售平台 &#xff5c;Java&#xff5c;SSM&#xff5c;HTML&#xff5c;JSP&#xff5c; 项目采用技术&#xff1a; ①&#xff1a;开发环境&#xff1a;IDEA、JDK1.8、Maven、Tomcat ②&#xff1a;技术栈&#xff1a;Java、…...

Powershell如何查询 windows defender是否开启

可以通过PowerShell使用以下方法检查Windows Defender&#xff08;Microsoft Defender Antivirus&#xff09;的状态&#xff1a; 方法1&#xff1a;使用 Get-MpComputerStatus 命令 此命令会返回Microsoft Defender的全面状态&#xff0c;包括实时保护、病毒定义版本等&#…...

【漫话机器学习系列】133.决定系数(R²:Coefficient of Determination)

决定系数&#xff08;&#xff09;详解 决定系数&#xff08;&#xff09;是回归分析中用于评估模型拟合优度的一个重要统计指标。它表示自变量&#xff08;特征变量&#xff09;能够解释因变量&#xff08;目标变量&#xff09;变异的程度&#xff0c;取值范围为 [0,1] 或 (−…...

【MySQL】数据库简要介绍和简单应用

目录 数据库简要介绍 SQL 的简单应用 需要注意的&#xff1a; 数据库简要介绍 数据库(database)是指长期存储在计算机内&#xff0c;有组织的、可共享的数据集合。它可视为一个电子化的文件柜&#xff0c;用来存储电子文件,用户可以对文件中的数据进行査询、新增、更新、删…...

【Kubernets】Deployment 和 StatefulSet 有什么区别?什么时候用 StatefulSet?

Deployment 和 StatefulSet 的区别 在 Kubernetes 中&#xff0c;Deployment 和 StatefulSet 都用于管理 Pod&#xff0c;但它们适用于不同的场景。 1. Deployment&#xff1a;管理无状态应用 特点&#xff1a; 无状态&#xff1a;Pod 之间相互独立&#xff0c;不需要保持顺…...

Machine Learning: 十大基本机器学习算法

机器学习算法分类&#xff1a;监督学习、无监督学习、强化学习 基本的机器学习算法&#xff1a; 线性回归、支持向量机(SVM)、最近邻居(KNN)、逻辑回归、决策树、k平均、随机森林、朴素贝叶斯、降维、梯度增强。 机器学习算法大致可以分为三类&#xff1a; 监督学习算法 (Sup…...

洛谷 P2801 教主的魔法 题解

之前学过 莫队 算法&#xff0c;其运用了分块思想&#xff1b;但是我居然是第一次写纯种的分块题目。 题意 给你一个长度为 n n n 的序列 a a a&#xff08;一开始 ∀ a i ∈ [ 1 , 1000 ] \forall a_i\in[1,1000] ∀ai​∈[1,1000]&#xff09;。要求执行 q q q 次操作&…...

【八股文】ArrayList和LinkedList的区别

先讲讲两者是如何实现的 ArrayList public class ArrayList<E> extends AbstractList<E>implements List<E>, RandomAccess, Cloneable, java.io.Serializable {transient Object[] elementData; private int size; } 通过源码可以看出&#xff0c;ArrayLis…...

函数的引用/函数的默认参数/函数的占位参数/函数重载

函数的引用 #include<iostream> using namespace std;//引用的本质在c内部实现&#xff0c;是一个指针常量//交换函数 //1.值传递 void mySwap01(int a, int b) {int temp a;a b;b temp; }//2.地址传递 void mySwap02(int *a, int *b) {int temp *a;*a *b;*b temp…...

《鸿蒙系统下AI模型训练加速:时间成本的深度剖析与优化策略》

在当今数字化浪潮中&#xff0c;鸿蒙系统凭借其独特的分布式架构与强大的生态潜力&#xff0c;为人工智能的发展注入了新的活力。随着AI应用在鸿蒙系统上的日益普及&#xff0c;如何有效降低模型训练的时间成本&#xff0c;成为了开发者与研究者们亟待攻克的关键课题。这不仅关…...

.npy文件介绍

.npy 文件是 NumPy 库专用的二进制文件格式&#xff0c;用于高效存储和加载 NumPy 数组&#xff08;即矩阵或多维数组&#xff09;。这种格式保留了数组的维度、数据类型&#xff08;dtype&#xff09;、形状&#xff08;shape&#xff09;等元信息&#xff0c;加载时无需手动解…...

汇编语言 | 王爽 | 学习笔记

汇编语言 | 王爽 | 学习笔记 文章目录 汇编语言 | 王爽 | 学习笔记一、基础知识1、指令2、存储器3、总线1、总线2、CPU对存储器的读写3、CPU对外设的控制 4、内存地址空间 二、寄存器1、寄存器2、通用寄存器3、8086CPU给出物理地址的方法4、段寄存器1、CS和IP2、DS 和 [address…...

JumpServer基础功能介绍演示

堡垒机可以让运维人员通过统一的平台对设备进行维护&#xff0c;集中的进行权限的管理&#xff0c;同时也会对每个操作进行记录&#xff0c;方便后期的溯源和审查&#xff0c;JumpServer是由飞致云推出的开源堡垒机&#xff0c;通过简单的安装配置即可投入使用&#xff0c;本文…...

java字符串案例 //要求:将输入的字符串中的数字转换为罗马数字,长度小于9(运用方法:查表法)

package test13; import test11.S;import java.util.Scanner; public class Num {public static void main(String[] args){ // I II III IV V VI VII VIII IX//要求&#xff1a;将输入的字符串中的数字转换为罗马数字,长度小于9&#xff08;运用方法&#xff1a;查表法&#x…...

EDID读取学习

简介 Video BIOS可以被认为是一个具有独立硬件抽象层的操作系统。它不会阻止或监视操作系统、应用程序或设备驱动程序对硬件的直接访问。虽然不推荐,但一些DOS应用程序确实可以改变基本的硬件设置,而根本不需要通过视频BIOS。大多数现代应用程序和操作系统都避免直接使用硬件…...

【笔记】深度学习模型训练的 GPU 内存优化之旅:综述篇

开设此专题&#xff0c;目的一是梳理文献&#xff0c;目的二是分享知识。因为笔者读研期间的研究方向是单卡上的显存优化&#xff0c;所以最初思考的专题名称是“显存突围&#xff1a;深度学习模型训练的 GPU 内存优化之旅”&#xff0c;英文缩写是 “MLSys_GPU_Memory_Opt”。…...

车载以太网测试-13【网络层-IGMP协议】

目录 1 摘要2 IGMP协议概述2.1 IGMP 在 TCP/IP 协议栈中的位置2.2 IGMP 与以太网的关系2.3 为什么需要IGMP协议&#xff1f;2.4 IGMP报文结构2.4.1 IGMPv1 报文结构2.4.2 IGMPv2 报文结构2.4.3 IGMPv3 报文结构 3 IGMP通信原理3.1 GMP 的通信流程3.2 IGMP协议完整流程示例 4 总…...

2024山东大学计算机复试上机真题

2024山东大学计算机复试上机真题 2024山东大学计算机复试机试真题 历年山东大学计算机复试上机真题 历年山东大学计算机复试机试真题 在线评测&#xff1a;传动门&#xff1a;pgcode.cn 最长递减子序列 题目描述 输入数字 n&#xff0c;和 n 个整数&#xff0c;输出该数字…...

Vue 计算属性与 Data 属性同名问题深度解析

文章目录 1. 问题背景与核心概念1.1 Vue 响应式系统架构1.2 核心概念定义 2. 同名问题的技术分析2.1 同名场景示例2.2 问题发生机制 3. 底层原理剖析3.1 Vue 初始化流程3.2 响应式系统关键代码 4. 问题解决方案4.1 最佳实践建议4.2 错误处理机制 5. 性能影响分析5.1 递归调用性…...

深入理解 Xtensa 架构 ESP32 内存架构(SRAM、IRAM、IROM、DRAM、DROM详解)

在 ESP32 及其他 Xtensa 架构 MCU 中&#xff0c;内存被划分为不同的区域&#xff0c;以优化性能和存储管理。这些内存区域包括 SRAM, IRAM, DRAM, IROM, DROM&#xff0c;它们各有用途。 1. 内存区域总览 ESP32 的内存架构主要由&#xff1a; SRAM&#xff08;Static RAM&am…...

每日一题——63. 不同路径 II

题目链接&#xff1a;63. 不同路径 II - 力扣&#xff08;LeetCode&#xff09; 代码&#xff1a; class Solution { public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int m obstacleGrid.size();int n obstacleGrid[0].size();…...

如何配置 Docker 以实现无需 sudo 使用

1. 背景知识&#xff1a;为什么需要 sudo&#xff1f; Docker 是一个容器化平台&#xff0c;其核心组件包括&#xff1a; Docker 守护进程&#xff08;dockerd&#xff09;&#xff1a;负责管理容器的创建、运行和销毁。Docker CLI&#xff1a;用户通过命令行工具&#xff08…...

[文献阅读] 可变形卷积DCN - Deformable Convolutional Networks

**文献信息&#xff1a;**Deformable Convolutional Networks arxiv.org/abs/1703.06211 发表于ICCV 2017&#xff0c;提出了可变形卷积DCN&#xff08;Deformable ConvNets&#xff09; 摘要 卷积神经网络&#xff08;CNN&#xff09;由于其构建模块固定的几何结构天然地局限…...

【统计学相关笔记】2. 多元正态的Cochran定理

fisher 引理 如何说明一个线性变换和二次型独立&#xff1a; 二次型矩阵和线性变换阵乘积0即可。...

蓝桥杯刷题——第十五届蓝桥杯大赛软件赛省赛C/C++ 大学 B 组

一、0握手问题 - 蓝桥云课 算法代码&#xff1a; #include <iostream> using namespace std; int main() {int sum0;for(int i49;i>7;i--)sumi;cout<<sum<<endl;return 0; } 直接暴力&#xff0c;题意很清晰&#xff0c;累加即可。 二、0小球反弹 - 蓝…...

Canoe Panel常用控件

文章目录 一、Panel 中控件分类1. 指示类控件2. 功能类控件3. 信号值交互类控件4. 其他类控件 二、控件使用方法1. Group Box 控件2. Input/Output Box控件3. Static Text控件4. Button控件5. Switch/Indicator 控件 提示&#xff1a;Button 和 Switch 的区别参考 一、Panel 中…...

【软考-架构】11.3、设计模式-新

✨资料&文章更新✨ GitHub地址&#xff1a;https://github.com/tyronczt/system_architect 文章目录 项目中的应用设计模式创建型设计模式结构型设计模式行为型设计模式 &#x1f4af;考试真题题外话 项目中的应用 在实际项目中&#xff0c;我应用过多种设计模式来解决不同…...

【后端】【django】Django 自带的用户系统与 RBAC 机制

Django 自带的用户系统与 RBAC 机制 Django 自带的用户系统&#xff08;django.contrib.auth&#xff09;提供了 身份验证&#xff08;Authentication&#xff09; 和 权限管理&#xff08;Authorization&#xff09;&#xff0c;能够快速实现 用户管理、权限控制、管理员后台…...

洛谷每日1题-------Day20__P1401 [入门赛 #18] 禁止在 int 乘 int 时不开 long long

题目描述 在比赛中&#xff0c;根据数据范围&#xff0c;分析清楚变量的取值范围&#xff0c;是非常重要的。int 类型变量与 int 类型变量相乘&#xff0c;往往可能超出 int 类型可以表示的取值范围。 现在&#xff0c;给出两个 int 类型变量 x,y 及其取值范围&#xff0c;请…...