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

【05】OpenCV C#——OpenCvSharp 图像基本操作---转灰度图、边缘提取、兴趣区域ROI,图像叠加

文章目录

  • 1 转灰度图、边缘提取
  • 2 兴趣区域ROI,图像叠加
    • 2.1 感兴趣区域
    • 2.2 图像叠加
      • 2.2.1 第一种:重载一般就是原封不动的叠加上去
  • 2.2.2 图像叠加

1 转灰度图、边缘提取

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;using OpenCvSharp;namespace CvSharp
{class Program{static void Main(string[] args){//创建一张128*128全白图像,和读取一张本地图像,进行显示测试Mat src = new Mat(@"D:\Projects\Programming_test\test_Images\12.png");Mat dst = new Mat();Mat gray = new Mat();Mat img2 = new Mat();//彩色转灰度图,边缘提取Cv2.CvtColor(src,gray,ColorConversionCodes.BGR2GRAY);Cv2.Canny(gray, dst, 50, 200);Cv2.ImShow("src image", src);Cv2.ImShow("gray image", gray);Cv2.ImShow("dst image", dst);Cv2.WaitKey();}}
}

在这里插入图片描述

2 兴趣区域ROI,图像叠加

2.1 感兴趣区域

            //定义感兴趣区域Rect roi = new Rect(100, 30, 288, 200);//首先要用个rect确定我们的兴趣区域在哪Mat ImageROI = new Mat(src, roi);//新建一个mat,把roi内的图像加载到里面去。img2 = src.Clone();Cv2.Rectangle(img2, roi,new Scalar(255,0,0),2);Cv2.ImShow("兴趣区域", ImageROI);Cv2.ImShow("绘制感兴趣区域", img2);

在这里插入图片描述

2.2 图像叠加

现在要把我们选取的兴趣区域叠加在原图上。这里会涉及到一个函数copyto,

  // 摘要://     Copies the matrix to another one.将矩阵复制到另一个//// 参数://   m://     Destination matrix. If it does not have a proper size or type before the operation,//     it is reallocated.目标矩阵。如果操作前没有合适的尺寸或型号,这是重新分配。public void CopyTo(Mat m);如果直接等于的话,对等于中的一个矩阵进行操作,其它矩阵也会被修改,他们是是指向同一个数据缓冲区//// 摘要://     Copies the matrix to another one.// 参数://   m://     Destination matrix. If it does not have a proper size or type before the operation,//     it is reallocated.////   mask://     Operation mask. Its non-zero elements indicate which matrix elements need to//     be copied.操作掩码,它的非零元素表示哪些矩阵元素需要被复制。public void CopyTo(Mat m, Mat mask);

2.2.1 第一种:重载一般就是原封不动的叠加上去

 //创建一张128*128全白图像,和读取一张本地图像,进行显示测试Mat src = new Mat(@"D:\Projects\Programming_test\test_Images\12.png" ,ImreadModes.AnyColor);Mat dst = new Mat();Mat gray = new Mat();Mat img2 = new Mat();//定义感兴趣区域Rect roi = new Rect(100, 30, 288, 200);//首先要用个rect确定我们的兴趣区域在哪Mat ImageROI = new Mat(src, roi);//新建一个mat,把roi内的图像加载到里面去。img2 = src.Clone();Cv2.Rectangle(img2, roi,new Scalar(255,0,0),2);Cv2.ImShow("兴趣区域", ImageROI);Cv2.ImShow("绘制感兴趣区域", img2);//图像叠加Rect rect = new Rect(0, 0, ImageROI.Rows, ImageROI.Cols);//定义第一个矩阵,前2个参数是要放的位置,后面插入图片的大小Mat pos = new Mat(src, rect);//将感兴趣区域叠加到原图左上角位置ImageROI.CopyTo(pos);Cv2.ImShow("图像叠加", src);Cv2.WaitKey();

按说可以,但叠加显示没变化
在这里插入图片描述

2.2.2 图像叠加

           //在这里插入代码片//创建一张128*128全白图像,和读取一张本地图像,进行显示测试Mat src = new Mat(@"D:\Projects\Programming_test\test_Images\12.png" ,ImreadModes.AnyColor);Mat dst = new Mat();Mat gray = new Mat();Mat img2 = new Mat();//定义感兴趣区域Rect roi = new Rect(100, 30, 288, 200);//首先要用个rect确定我们的兴趣区域在哪Mat ImageROI = new Mat(src, roi);//新建一个mat,把roi内的图像加载到里面去。img2 = src.Clone();Cv2.Rectangle(img2, roi,new Scalar(255,0,0),2);Cv2.ImShow("兴趣区域", ImageROI);Cv2.ImShow("绘制感兴趣区域", img2);//图像叠加Mat mask = ImageROI.CvtColor(ColorConversionCodes.BGR2GRAY);//新建一个掩码接收变成灰度图的滑稽Cv2.Threshold(mask, mask, 240, 255, ThresholdTypes.BinaryInv);//灰度图二值化,高于240的变成黑色,其它白色Rect rect = new Rect(30, 30, ImageROI.Rows, ImageROI.Cols);//复制到哪去Mat pos = new Mat(src, rect);ImageROI.CopyTo(pos, mask);//掩码黑色的区域不复制Cv2.ImShow("mask", mask);Cv2.ImShow("图像叠加", src);Cv2.WaitKey();

按说可以,但叠加显示没变化
在这里插入图片描述

http://www.lryc.cn/news/608079.html

相关文章:

  • MyBatisPlus之CRUD接口(IService与BaseMapper)
  • 西门子 G120 变频器全解析:从认知到参数设置
  • 技巧|SwanLab记录ROC曲线攻略
  • LINUX82 shell脚本变量分类;系统变量;变量赋值;四则运算;shell
  • 系统性学习数据结构-第一讲-算法复杂度
  • MySQL 内置函数
  • ADB 查看 CPU 信息、查看内存信息、查看硬盘信息
  • 排序算法大全:从插入到快速排序
  • k8s使用 RBAC 鉴权
  • 论文阅读笔记:Dataset Condensation with Gradient Matching
  • [C++竞赛]数论
  • 深入 Go 底层原理(十三):interface 的内部表示与动态派发
  • [硬件电路-113]:模拟电路 - 信号处理电路 - 二极管的应用 - 精密整流电路与波形
  • sqli-labs:Less-18关卡详细解析
  • Json Jsoncpp
  • hyper-v实战系列:第一代虚拟机转第二代步骤
  • 深入理解 Docker 容器网络:为什么用 host 网络模式能解决连通性问题?
  • yolo 、Pytorch (5)IOU
  • Git、Gitee、GitHub、GitLab完整讲解:从基础到进阶
  • web:js的模块导出/导入
  • 开疆智能Profinet转Modbus网关连接信捷PLC从站配置案例
  • K8S部署ELK(二):部署Kafka消息队列
  • 深入 Go 底层原理(六):垃圾回收(GC)
  • ubuntu22.04离线一键安装gpu版docker
  • 开源列式分布式数据库clickhouse
  • pyqt5显示任务栏菜单并隐藏主窗口,环境pyqt5+vscode
  • CS课程项目设计7:基于Canvas交互友好的五子棋游戏
  • 从AI智能体出发,重构数据中台:迈向Agentic时代的数据能力体系
  • Docker容器中文PDF生成解决方案
  • Oracle 11gR2 Clusterware应知应会