当前位置: 首页 > 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.xdnf.cn/news/1229941.html

相关文章:

  • Day25-对称二叉树-
  • react 和 react native 的开发过程区别
  • React ahooks——副作用类hooks之useThrottleEffect
  • 再见!三层框架开发
  • Java中的sort()排序详解
  • 涉水救援机器人cad【12张】三维图+设计书明说
  • linux编译基础知识-头文件标准路径
  • 轻量级鼠标右键增强工具 MousePlus
  • eSIM技术深度解析:从物理芯片到数字革命
  • Python从入门到精通——第五章 列表与元组
  • 机器学习【五】decision_making tree
  • 深入解析Java Stream Sink接口
  • JVM学习日记(十四)Day14——性能监控与调优(一)
  • 小迪23年-22~27——php简单回顾(2)
  • IMAP电子邮件归档系统Mail-Archiver
  • rabbitmq消息队列详述
  • 【Android】使用 Intent 传递对象的两种序列化方式
  • 深度学习-模型初始化与模型构造
  • 高性能MCP服务器架构设计:并发、缓存与监控
  • 【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 微博舆情数据可视化分析-热词情感趋势树形图
  • 【机器学习】非线性分类算法详解(下):决策树(最佳分裂特征选择的艺术)与支持向量机(最大间隔和核技巧)
  • 在 AKS 中运行 Azure DevOps 私有代理-1
  • Linux性能监控与调优全攻略
  • React ahooks——副作用类hooks之useThrottleFn
  • React ahooks——副作用类hooks之useDebounceFn
  • Shell【脚本 02】离线安装配置Zookeeper及Kafka并添加service服务和开机启动(脚本分析)
  • 堆----1.数组中的第K个最大元素
  • 通过filezilla在局域网下实现高速传输数据
  • 2025-08 安卓开发面试拷打记录(面试题)
  • 【龙泽科技】汽车故障诊断仿真教学软件【风光580】