[17] 使用Opencv_CUDA 进行滤波操作

使用Opencv_CUDA 进行滤波操作

  • 邻域处理操作 ==> 滤波操作,拒绝或者允许某特定频段通过
  • 如果图像某处的灰度级变化缓慢,那么就是低频区域,如果灰度级变化剧烈,就是高频区域
  • 邻域滤波即卷积操作
  • 形态学处理:膨胀,腐蚀,开、闭运算

1. 低通滤波

  • 低通滤波可以从图像中删除高频内容。噪声通常被视为高频内容,因此低通滤波器能从图像中消除噪声。
  • 噪声类型有:高斯噪声,均匀噪声,指数噪声与椒盐噪声

1.1 均值滤波

  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::cuda::GpuMat d_img1, d_result3x3, d_result5x5, d_result7x7;d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filter3x3, filter5x5, filter7x7;filter3x3 = cv::cuda::createBoxFilter(CV_8UC1, CV_8UC1, cv::Size(3, 3));filter3x3->apply(d_img1, d_result3x3);filter5x5 = cv::cuda::createBoxFilter(CV_8UC1, CV_8UC1, cv::Size(5, 5));filter5x5->apply(d_img1, d_result5x5);filter7x7 = cv::cuda::createBoxFilter(CV_8UC1, CV_8UC1, cv::Size(7, 7));filter7x7->apply(d_img1, d_result7x7);cv::Mat h_result3x3, h_result5x5, h_result7x7;d_result3x3.download(h_result3x3);d_result5x5.download(h_result5x5);d_result7x7.download(h_result7x7);cv::imshow("Original Image ", h_img1);cv::imshow("Blurred_3x3", h_result3x3);cv::imshow("Blurred_5x5", h_result5x5);cv::imshow("Blurred_7x7", h_result7x7);cv::imwrite("Blurred3x3.png", h_result3x3);cv::imwrite("Blurred5x5.png", h_result5x5);cv::imwrite("Blurred7x7.png", h_result7x7);cv::waitKey();return 0;
}

在这里插入图片描述

1.2 高斯滤波

  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/cameraman.tif", 0);cv::cuda::GpuMat d_img1, d_result3x3, d_result5x5, d_result7x7;d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filter3x3, filter5x5, filter7x7;filter3x3 = cv::cuda::createGaussianFilter(CV_8UC1, CV_8UC1, cv::Size(3, 3), 1);filter3x3->apply(d_img1, d_result3x3);filter5x5 = cv::cuda::createGaussianFilter(CV_8UC1, CV_8UC1, cv::Size(5, 5), 1);filter5x5->apply(d_img1, d_result5x5);filter7x7 = cv::cuda::createGaussianFilter(CV_8UC1, CV_8UC1, cv::Size(7, 7), 1);filter7x7->apply(d_img1, d_result7x7);cv::Mat h_result3x3, h_result5x5, h_result7x7;d_result3x3.download(h_result3x3);d_result5x5.download(h_result5x5);d_result7x7.download(h_result7x7);cv::imshow("Original Image ", h_img1);cv::imshow("Blurred with kernel size 3x3", h_result3x3);cv::imshow("Blurred with kernel size 5x5", h_result5x5);cv::imshow("Blurred with kernel size 7x7", h_result7x7);cv::imwrite("gBlurred3x3.png", h_result3x3);cv::imwrite("gBlurred5x5.png", h_result5x5);cv::imwrite("gBlurred7x7.png", h_result7x7);cv::waitKey();return 0;
}

在这里插入图片描述

1.3 中值滤波

  • opencv_cuda提供了中值滤波功能,但是比cpu函数要慢
  • cpu代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"int main()
{cv::Mat h_img1 = cv::imread("images/saltpepper.png", 0);cv::Mat h_result;cv::medianBlur(h_img1, h_result, 3);cv::imshow("Original Image ", h_img1);cv::imshow("Median Blur Result", h_result);cv::waitKey();return 0;
}
  • gpu实现:
filter3x3 = cv::cuda::createMedianFilter(CV_8UC1, 3);
filter3x3->apply(d_img1, d_result3x3);

2. 高通滤波

  • 高通滤波器可去除图像中的低频成分并增强高频成分,它可以去除低频范围内的背景并且增强属于高频成分的边缘
  • 常用高频滤波器:Sobel、Scharr、Laplacian

2.1 Sobel滤波器

  • 两个检测水平边缘与垂直边缘的核
    在这里插入图片描述
  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>
#include<opencv2/cudaarithm.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/blobs.png", 0);cv::cuda::GpuMat d_img1, d_resultx, d_resulty, d_resultxy;d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filterx, filtery, filterxy;filterx = cv::cuda::createSobelFilter(CV_8UC1, CV_8UC1, 1, 0);filterx->apply(d_img1, d_resultx);filtery = cv::cuda::createSobelFilter(CV_8UC1, CV_8UC1, 0, 1);filtery->apply(d_img1, d_resulty);cv::cuda::add(d_resultx, d_resulty, d_resultxy);cv::Mat h_resultx, h_resulty, h_resultxy;d_resultx.download(h_resultx);d_resulty.download(h_resulty);d_resultxy.download(h_resultxy);cv::imshow("Original Image ", h_img1);cv::imshow("Sobel-x derivative", h_resultx);cv::imshow("Sobel-y derivative", h_resulty);cv::imshow("Sobel-xy derivative", h_resultxy);cv::imwrite("sobelx.png", h_resultx);cv::imwrite("sobely.png", h_resulty);cv::imwrite("sobelxy.png", h_resultxy);cv::waitKey();return 0;
}

在这里插入图片描述

2.2 Scharr 滤波器

  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>
#include<opencv2/cudaarithm.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/blobs.png", 0);cv::cuda::GpuMat d_img1, d_resultx, d_resulty, d_resultxy;d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filterx, filtery;filterx = cv::cuda::createScharrFilter(CV_8UC1, CV_8UC1, 1, 0);filterx->apply(d_img1, d_resultx);filtery = cv::cuda::createScharrFilter(CV_8UC1, CV_8UC1, 0, 1);filtery->apply(d_img1, d_resulty);cv::cuda::add(d_resultx, d_resulty, d_resultxy);cv::Mat h_resultx, h_resulty, h_resultxy;d_resultx.download(h_resultx);d_resulty.download(h_resulty);d_resultxy.download(h_resultxy);cv::imshow("Original Image ", h_img1);cv::imshow("Scharr-x derivative", h_resultx);cv::imshow("Scharr-y derivative", h_resulty);cv::imshow("Scharr-xy derivative", h_resultxy);cv::imwrite("scharrx.png", h_resultx);cv::imwrite("scharry.png", h_resulty);cv::imwrite("scharrxy.png", h_resultxy);cv::waitKey();return 0;
}

在这里插入图片描述

2.3 Laplacian 滤波

  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>
#include<opencv2/cudaarithm.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/blobs.png", 0);cv::cuda::GpuMat d_img1, d_result1, d_result3;d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filter1, filter3;filter1 = cv::cuda::createLaplacianFilter(CV_8UC1, CV_8UC1, 1);filter1->apply(d_img1, d_result1);filter3 = cv::cuda::createLaplacianFilter(CV_8UC1, CV_8UC1, 3);filter3->apply(d_img1, d_result3);cv::Mat h_result1, h_result3;d_result1.download(h_result1);d_result3.download(h_result3);cv::imshow("Original Image ", h_img1);cv::imshow("Laplacian Filter 1", h_result1);cv::imshow("Laplacian Filter 3", h_result3);cv::imwrite("laplacian1.png", h_result1);cv::imwrite("laplacian3.png", h_result3);cv::waitKey();return 0;
}

在这里插入图片描述

3. 形态学处理

  • 代码实现:
#include <iostream>
#include "opencv2/opencv.hpp"
#include<opencv2/cudafilters.hpp>
#include<opencv2/cudaarithm.hpp>int main()
{cv::Mat h_img1 = cv::imread("images/blobs.png", 0);cv::cuda::GpuMat d_img1, d_resulte, d_resultd, d_resulto, d_resultc;cv::Mat element = cv::getStructuringElement(cv::MORPH_RECT, cv::Size(5, 5));d_img1.upload(h_img1);cv::Ptr<cv::cuda::Filter> filtere, filterd, filtero, filterc;filtere = cv::cuda::createMorphologyFilter(cv::MORPH_ERODE, CV_8UC1, element);filtere->apply(d_img1, d_resulte);filterd = cv::cuda::createMorphologyFilter(cv::MORPH_DILATE, CV_8UC1, element);filterd->apply(d_img1, d_resultd);filtero = cv::cuda::createMorphologyFilter(cv::MORPH_OPEN, CV_8UC1, element);filtero->apply(d_img1, d_resulto);filterc = cv::cuda::createMorphologyFilter(cv::MORPH_CLOSE, CV_8UC1, element);filterc->apply(d_img1, d_resultc);cv::Mat h_resulte, h_resultd, h_resulto, h_resultc;d_resulte.download(h_resulte);d_resultd.download(h_resultd);d_resulto.download(h_resulto);d_resultc.download(h_resultc);cv::imshow("Original Image ", h_img1);cv::imshow("Erosion", h_resulte);cv::imshow("Dilation", h_resultd);cv::imshow("Opening", h_resulto);cv::imshow("closing", h_resultc);cv::imwrite("erosion7.png", h_resulte);cv::imwrite("dilation7.png", h_resultd);cv::imwrite("opening7.png", h_resulto);cv::imwrite("closing7.png", h_resultc);cv::waitKey();return 0;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全网最全postman接口测试教程和项目实战~从入门到精通

Postman实现接口测试内容大纲一览&#xff1a; 一、什么是接口&#xff1f;为什么需要接口&#xff1f; 接口指的是实体或者软件提供给外界的一种服务。 因为接口能使我们的实体或者软件的内部数据能够被外部进行修改。从而使得内部和外部实现数据交互。所以需要接口。 比如&…

Spring Boot -- 图书管理系统(登录、展示+翻页、添加/修改图书)

文章目录 一、应用分层二、数据库的设计三、登录功能四、展示列表&#xff08;使用虚构的数据&#xff09;五、翻页 展示功能六、添加图书七、修改图书 一、应用分层 为什么我们需要应用分层&#xff1a;当代码量很多时&#xff0c;将其全部放在一起查找起来就会很麻烦&#…

Docker 可用镜像源

当使用 docker 发现拉取不到镜像时&#xff0c;可以编辑 /etc/docker/daemon.json 文件&#xff0c;添加如下内容&#xff1a; 这文章不涉及政治&#xff0c;不涉及敏感信息&#xff0c;三番五次的审核不通过&#xff0c;一删再删&#xff0c;只好换图片了。 重新加载服务配置…

Zookeeper基础教程

Zookeeper基础教程 资料来源&#xff1a;Zookeeper Tutorial (tutorialspoint.com) zookeeper就是Hadoop生态动物园的管理员 1. Zookeeper-概述 ZooKeeper是一种分布式协调服务&#xff0c;用于管理大型主机集群(large set of hosts)。在分布式环境中协调和管理服务是一个复…

解决navicat连接oracle19c数据库缺少oci.dll

下载oci.dll文件 搜索Oracle Instant Client Downloads Oracle Instant Client Downloads点击 Oracle Instant Client Downloads 超链接 根据自己的操作系统按需选择 以windows64位为例&#xff0c;下载 Version 19.23.0.0.0的OCI压缩包 解压到Navicat的安装根路径下&#xff…

Qt creator day1 练习

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面&#xff0c;要求&#xff1a;第行代码都有注释 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {this->setWindowTitle("贪玩蓝月——是兄弟就来砍我 登入&#…

两个src案例分享

案例一 文前废话:某天正在刷着**社区的帖子,欣赏着漂亮的小姐姐,突然间评论区的一条评论引起了我的注意,类似于下面这样 这种评论在html标签中代码格式是<a>这是文字</a>这样的 同时评论区XSS漏洞的高发区,想着可能会有操作点 一、发布一个标题有js语句的贴子 二…

接口联调测试工作总结

接口联调测试工作已经告一段落&#xff0c;现在总结如下: 1、首先接口联调测试的价值 2、接口联调要有工作思路 3、接口联调工作准备 4、接口联调测试数据设计 5、接口联调脚本研发 6、脚本联调测试 测试业务本身需要接口联调调用 独立接口正确&#xff0c;但有可能接口…

如何用Vue3打造一个令人惊叹的极坐标图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 使用 Vue3-ApexCharts 绘制极地区域图 应用场景 极地区域图常用于展示具有周期性或分类性数据的分布情况&#xff0c;例如不同月份的销售额、不同年龄段的人口分布等。 基本功能 此代码使用 Vue3-ApexChart…

平安养老险黄山中支开展“反洗钱电影送下乡”活动

为不断增强反洗钱教育宣传的精准性和有效性&#xff0c;提升乡村群众的洗钱风险防范意识&#xff0c;6月18日&#xff0c;在中国人民银行黄山市分行的部署和指导下&#xff0c;平安养老保险股份有限公司&#xff08;以下简称“平安养老险”&#xff09;黄山中心支公司、平安人寿…

Python基础教程(二十六):对接MongoDB

&#x1f49d;&#x1f49d;&#x1f49d;首先&#xff0c;欢迎各位来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里不仅可以有所收获&#xff0c;同时也能感受到一份轻松欢乐的氛围&#xff0c;祝你生活愉快&#xff01; &#x1f49d;&#x1f49…

COSMOSPANDA星际熊猫X 2024广州童博会|聚焦星潮,潮酷无限

中国国宝级原创潮玩IP COSMOSPANDA星际熊猫 震撼亮相2024广州童博会现场 聚焦星潮&#xff0c;潮酷无限 星际熊猫亮相展馆C位 3天展期、400㎡展位 超大型潮玩原创艺术装置 潮玩艺术&#xff0c;打造强烈视觉冲击 外贸中心周善青副主任代表中国第一展广交会前来巡馆 星际…

虚拟机配置桥接模式

背景 因为要打一些awd比赛,一些扫描工具什么的,要用到kali,就想着换成一个桥接模式 但是我看网上的一些文章任然没弄好,遇到了一些问题 前置小问题 每次点开虚拟网络编辑器的时候都没有vmnet0,但是点击更改的时候却有vmnet0 第一步: 点击更改设置 第二步: 把wmnet0删掉 …

构建高效的大数据量延迟任务调度平台

目录 引言系统需求分析系统架构设计 总体架构任务调度模块任务存储模块任务执行模块 任务调度算法 时间轮算法优先级队列分布式锁 数据存储方案 关系型数据库NoSQL数据库混合存储方案 容错和高可用性 主从复制数据备份与恢复故障转移 性能优化 水平扩展缓存机制异步处理 监控与…

【代码随想录】【算法训练营】【第44天】 [322]零钱兑换 [279]完全平方数 [139]单词拆分

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day 44&#xff0c;周四&#xff0c;坚持不住了~ 题目详情 [322] 零钱兑换 题目描述 322 零钱兑换 解题思路 前提&#xff1a; 思路&#xff1a; 重点&#xff1a; 代码实现 C语言 [279] 完全…

(创新)基于VMD-CNN-BiLSTM的电力负荷预测—代码+数据

目录 一、主要内容&#xff1a; 二、运行效果&#xff1a; 三、VMD-BiLSTM负荷预测理论&#xff1a; 四、代码数据下载&#xff1a; 一、主要内容&#xff1a; 本代码结合变分模态分解( Variational Mode Decomposition&#xff0c;VMD) 和卷积神经网络(Convolutional neu…

视频去水印,视频去水印软件

有时候我们在网上下载了一些喜欢的视频&#xff0c;但是却发现上面有水印&#xff0c;影响观看体验。今天我就来教大家一个轻松去除视频水印的简单的方法。 一、使用专业视频编辑软件去水印 市面上有很多专业的视频编辑软件&#xff0c;如Adobe Premiere Pro&#xff0c;它们都…

代码大模型揭秘:从下载到推理,全流程体验StarCoder

选择模型 模型榜单 大模型的发展日新月异&#xff0c;性能强劲的大模型不断涌现&#xff0c;可以实时关注开源大模型的榜单&#xff0c;选择合适自己的大模型 开源大模型榜单 开源代码大模型榜单 模型网站 目前主流的下载模型的网站就是 huggingface 全球社区&#xff0c;…

react实现窗口悬浮框,可拖拽、折叠、滚动

1、效果如下 2、如下两个文件不需要修改 drag.js import React from "react"; import PropTypes from "prop-types";export default class DragM extends React.Component {static propTypes {children: PropTypes.element.isRequired};static defaultP…

Python - 各种计算器合集【附源码】

计算器合集 一&#xff1a;极简版计算器二&#xff1a;简易版计算器三&#xff1a;不简易的计算器四&#xff1a;还可以计算器 一&#xff1a;极简版计算器 运行效果&#xff1a; import tkinter as tk import tkinter.messagebox win tk.Tk() win.title("计算器")…