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

Opencv边缘检测(四)

sobel边缘检测

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _05_sobel边缘检测
{
    internal class Program
    {
        static void Main(string[] args)
        {
            Mat gard_x= new Mat();
            Mat abs_gard_x = new Mat();


            Mat gard_y = new Mat();
            Mat abs_gard_y = new Mat();

            Mat dst = new Mat();


            Mat src= Cv2.ImRead(@"F:\AI视觉23班\06_OpenCV\images\airline-stewardess-bikini.jpg");

            Cv2.ImShow("原图", src);
            //参数1:输入图像
            //参数2:输出图像
            //参数3:输出的图像的类型
            //参数4,参数5: 1,0 表示求dx=1 dy=0的方向的一阶导数

            //求 x方向的梯度
            Cv2.Sobel(src, gard_x,MatType.CV_16S,1,0);

            //用于对图片进行高亮处理
            Cv2.ConvertScaleAbs(gard_x, abs_gard_x);
            Cv2.ImShow("x方向", abs_gard_x);
          

            //求 y方向的梯度

            Cv2.Sobel(src, gard_y, MatType.CV_16S,0,1);
            Cv2.ConvertScaleAbs(gard_y, abs_gard_y);
            Cv2.ImShow("y方向", abs_gard_y);
       



            //合并
            //整体方向的梯度
            Cv2.AddWeighted(abs_gard_x, 0.5, abs_gard_y, 0.5,0,dst);
            Cv2.ImShow("合并", dst);

            Cv2.WaitKey(0);

        }
    }
}

canny边缘检测

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _06_canny边缘检测
{
    internal class Program
    {
        static void Main(string[] args)
        {
          Mat scrImage1=  Cv2.ImRead(@"F:\AI视觉23班\06_OpenCV\images\orange.jpg");
            //复制
            Mat scrImage2=scrImage1.Clone();


            Cv2.ImShow("原图",scrImage1);

            //创建一个和scrImage1同样大小同样类型的矩阵
         Mat dstImage=   new Mat(scrImage1.Cols, scrImage1.Rows, scrImage1.Type());
            Mat grayImage= new Mat();
            //将原图转换成灰度图
            Cv2.CvtColor(scrImage2, grayImage,ColorConversionCodes.BGR2GRAY);


            Mat edge =new Mat();
            Cv2.Blur(grayImage, edge,new Size() { Width = 3, Height=3});

            //参数1:输入图像,必须是灰度图
            //参数2:输出边缘图像
            //参数3和参数4:阈值  这两个阈值中当中的小阈值用来控制边缘连接,大的阈值用来控制强边缘的初始分割,即如果一个像素的梯度大与上限值,则被认为是边缘像素,如果小于下限阈值,则被抛弃。如果该点的梯度在两者之间则当这个点与高于上限值的像素点连接时我们才保留,否则删除。
            Cv2.Canny(edge, edge,3,9);


            scrImage2.CopyTo(dstImage, edge);


            Cv2.ImShow("边缘",dstImage);
            Cv2.WaitKey(0);


        }
    }
}

Scharr滤波器

using OpenCvSharp;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _07_Scharr滤波器
{
    internal class Program
    {
        static void Main(string[] args)
        {

            Mat gard_x = new Mat();
            Mat abs_gard_x = new Mat();
            Mat gard_y = new Mat();
            Mat abs_gard_y = new Mat();
            Mat dst = new Mat();



            Mat src = Cv2.ImRead(@"F:\AI视觉23班\06_OpenCV\images\airline-stewardess-bikini.jpg");

            Cv2.ImShow("原图", src);
            //参数1:输入图像
            //参数2:输出图像
            //参数3:输出的图像的类型
            //参数4,参数5: 1,0 表示求dx=1 dy=0的方向的一阶导数

            //求 x方向的梯度
            Cv2.Scharr(src, gard_x, MatType.CV_16S, 1, 0);

            //用于对图片进行高亮处理
            Cv2.ConvertScaleAbs(gard_x, abs_gard_x);
            Cv2.ImShow("x方向", abs_gard_x);


            //求 y方向的梯度

            Cv2.Scharr(src, gard_y, MatType.CV_16S, 0, 1);
            Cv2.ConvertScaleAbs(gard_y, abs_gard_y);
            Cv2.ImShow("y方向", abs_gard_y);


            //合并
            //整体方向的梯度
            Cv2.AddWeighted(abs_gard_x, 0.5, abs_gard_y, 0.5, 0, dst);
            Cv2.ImShow("合并", dst);

            Cv2.WaitKey(0);


        }
    }
}

http://www.kler.cn/a/311495.html

相关文章:

  • sqoop import将Oracle数据加载至hive,数据量变少,只能导入一个mapper的数据量
  • 【智谱开放平台-注册/登录安全分析报告】
  • [HNCTF 2022 Week1]ret2shellcode-好久不见12
  • docker compose 多个 Dockerfile
  • 【LLM Agents体验 3】利用Open-WebUI+Ollama本地部署Qwen2.5:7B大模型的安装指南
  • 可编辑PPT | 指挥中心系统建设与应用方案
  • 梯度计算中的一些算子
  • 魔方财务迁移指南
  • 【mysql面试题】mysql复习之常见面试题(二)
  • Conda和pip 清空缓存
  • Vue Router v3 深入指南:配置、概念、代码演示及应用场景
  • 新发布的OpenAI o1生成式AI模型在强化学习方面迈出了重要的一步
  • PHP发邮件教程:配置SMTP服务器发送邮件?
  • Mysql高级篇(中)—— SQL优化
  • 【ComfyUI】自定义节点ComfyUI_LayerStyle——模仿 Adob​​e Photoshop 的图层样式、图层混合、图文混合、添加不可见水印
  • QString返回字符串的字节数
  • 【5】AT32F437 OpenHarmony轻量系统移植教程(2)
  • SSH 服务器,防止链接断开,训练终止操作————screen
  • Elasticsearch 分片迁移与移除集群节点操作
  • POI生成Excel文件增加数据验证(下拉序列)
  • 获取多媒体相册的内容
  • WEB攻防-JavaWweb项目JWT身份攻击组件安全访问控制
  • Qt 菜单栏、工具栏、状态栏、标签、铆接部件(浮动窗口) 设置窗口核心部件(文本编辑控件)的基本使用
  • 代理模式-动态代理
  • Vue3:defineProps接收父组件传递的数据
  • java八股文之Redis