OpenCV实验系列之Mask操作

OpenCV:mask的作用,如何制作掩模mask 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、mask是什么?二、OpenCV生成mask的几种方法总结 前言 OpenCV中的很多函数用到mask,mask是什么?怎么作一个mask?将是本文的主要内容。 一、mask是什么? mask 不是马斯克,是掩膜,可以用来遮盖非感兴趣区,突出感兴趣区,使得图像处理只专注于ROI部分。 二、OpenCV生成mask的几种方法 注意:mask最终需要与要作用到的输入图像的尺寸与类型保持一致 方法一如下: #include. 阅读详情

OpenCV实验系列之Mask操作

注意:以下内容根据opencv官网提供的教程结合个人理解所得,仅是个人学习笔记,可能存在错误或偏差,欢迎指正。

Mask矩阵的计算法则

Mask operations on matrices are quite simple. The idea is that we recalculate each pixels value in an image according to a mask matrix (also known as kernel). This mask holds values that will adjust how much influence neighboring pixels (and the current pixel) have on the new pixel value. From a mathematical point of view we make a weighted average, with our specified values.

Mask矩阵有时也称为kernel其实是描述某个像素点受到周围的像素点影响的程度。在OpenCV官网上给出的例子可清楚的说明其计算的方式
这里写图片描述
其中我们所计算的像素点位于(0,0)处,而计算内容是将该像素及其周围的像素点乘上对应的权重再求和之后重新赋值于该点。

Mask操作的C++实现

在opencv库中提供了

//! applies non-separable 2D linear filter to the image
CV_EXPORTS_W void filter2D( InputArray src, 
                            OutputArray dst, int ddepth,
                            InputArray kernel, 
                            Point anchor=Point(-1,-1),
                            double delta=0, 
                            int borderType=BORDER_DEFAULT 
                            );

The function even has a fifth optional argument to specify the center of the kernel, a sixth for adding an optional value to the filtered pixels before storing them in K and a seventh one for determining what to do in the regions where the operation is undefined (borders).

该函数的锚点默认为Mask矩阵的中心(与上图表述不同)

以下为使用例程

#include<iostream>  
#include <opencv2/core/core.hpp>  
#include <opencv2/highgui/highgui.hpp>  
#include <opencv2/opencv.hpp>

using namespace std;
using namespace cv;

void main()
{
    Mat src;
    Mat dst;
    src=imread("timg.jpg");
    imshow("src",src);
    dst.create(src.size(),src.type());

    //基本运算实现
    const int nChannels = src.channels();//获取通道数
    dst.create(src.size(),src.type());
    double t = (double)getTickCount();//计时开始
    for(int j = 1 ; j < src.rows-1; ++j)
    {
        const uchar* previous = src.ptr<uchar>(j - 1);//获取相关行指针
        const uchar* current  = src.ptr<uchar>(j    );
        const uchar* next     = src.ptr<uchar>(j + 1);
        uchar* output = dst.ptr<uchar>(j);
        for(int i= nChannels;i < nChannels*(src.cols-1); ++i)
        {
            *output++ = saturate_cast<uchar>(5*current[i] - current[i-nChannels] 
                        - current[i+nChannels] - previous[i] - next[i]);//计算并防止溢出
        }
    }
    t = ((double)getTickCount() - t)/getTickFrequency();//计算耗时
    cout << "Times passed in seconds: " << t << endl;
    imshow("dst",dst);

    //线性滤波器运算实现
    Mat kernel = (Mat_<char>(3,3) <<  0, -1,  0,
                                   -1,  5, -1,
                                    0, -1,  0);

    t = (double)getTickCount();//计时开始
    filter2D( src, dst, src.depth(), kernel );
    t = ((double)getTickCount() - t)/getTickFrequency();//计算耗时
    cout << "Times passed in seconds: " << t << endl;
    imshow("dst1",dst);
    waitKey(0);
}

这里写图片描述
原图
这里写图片描述
处理图,锐化

3.python-opencv图像mask掩膜处理 `本文主要实现只提取图像中的‘花’所在的区域,其他背景区域全部转为黑色。可以使用mask对图像进行掩膜处理,从而提取‘花’部分的ROI,本文主要涉及颜色空间转换、mask设置和按位运算。 阅读详情

相关推荐

opencv学习记录——(12) 设置mask区域

mask图像和logo图像大小尺寸都一样,添加了mask后,只有mask的白色区域在logo中的相同区域能显示出来,即只有该区域才能粘贴在原图img上。二、mask区域是原logo取反二值化。下面是logo 原图。

qq_39648561的博客 1736

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用

每一个不曾起舞的日子,都是对生命的辜负 6425

OpenCV中的掩码(mask)操作

今天需要对图像中的某片区域

lixtary的专栏 5445

OpenCV中掩膜(mask)图像的创建和使用

它通常是一个二维数组,与原始图像具有相同的尺寸,其上的每个像素值用来指示对应于原始图像中像素的处理方式。在后两种情况中,标量会首先被转换为与数组相匹配的类型,然后再进行运算。以下代码,可以在Source窗口中用鼠标左键点击选择点,这些点就是轮廓的顶点,在你点击的时候,会把点用线连起来,形成轮廓,然后点击右键开始创建掩膜。该函数能够填充复杂的区域,例如含有空洞的区域、自身相交的轮廓(它们的部分),等等。区域选择:在图像处理操作中,仅对掩模中标记为非零的区域应用滤镜、颜色调整或其他效果,而忽略零值区域。

jndingxin的专栏 6990

【Ubuntu+OpenCV】你被mask mask住了吗??探讨opencv中诸如cvcopy(*src,*dst,*mask) 中的mask的作用是什么?

  其实opencv里面很多函数都是会带有一个mask参数的,很多同学都不知道它到底有什么用,好像在实际运用中忽略它也没有什么问题(这不废话嘛,opencv设计师设计它的时候默认就是可以忽略的)。我在这里就抛砖引玉,详细分析一个常用函数cvcopy里面的mask,希望可以给大家一点点指引。cvCopy这个函数很熟洗哈,用得很多吧哈哈……以

cv ml ai曾经的最爱 1万+

【OpenCV C++20 学习笔记】矩阵上的掩码(mask)操作

在锐化等图片处理中,经常会用到掩码(mask)操作。本文详细介绍了掩码操作的原理,并将自定义的掩码操作实现和OpenCV中的filter2D方法进行了对比。

TeamLee的博客 2693

OpenCV中掩膜操作(mask)实例

#include #include #include using namespace cv; using namespace std; void Sharpen(const Mat& myImage, Mat& Result) { CV_Assert(myImage.depth() == CV_8U); // accept only uchar images Resu

lichengyu的专栏 1万+

ESP32驱动MLX90640红外热成像传感器:从报错到成功运行的完整避坑指南

本文是一份详细的ESP32驱动MLX90640红外热成像传感器的实战指南。针对开发中常见的I2C通信失败、数据全零及‘坏点过多’等报错,文章提供了从环境搭建、驱动库选择与改造到实战代码解析的完整解决方案,并分享了数据滤波、热图生成及多任务优化等高级技巧,帮助开发者高效避坑,实现稳定运行。

weixin_29191669的博客 96

OpenCV对图像进行mask操作

这里的mask操作指的是,对一幅图像image,有一个binary的mask图像,image_masked = image & mask 可以采用 Mat的copyTo成员函数,利用mask参数实现。 #include #include "opencv2/imgproc/imgproc.hpp" #include #include using namespace cv; using n

lichengyu的专栏 2万+

SOC-ATF 安全启动BL2流程分析(2)

Bl2的启动流程与bl1类似,主要区别是bl2的初始化流程比bl1更简单,但其可能需要加载更多的镜像,如bl31、bl32和bl33。由于bl2可以运行于el3或s-el1,它们的入口函数和处理流程都有所区别,为了简化分析我们选取比较常见的s-el1方式,以下为其总体执行流程:上图仅供参考,实际看一下代码结构:上面截图展示了 链接汇编文件,bl2_el3.ld.S 是指bl2 运行于el3;bl2.ld.S 是实现bl2运行于s-el1 .

z20230508的博客 1389

FPGA时序约束--实战篇(读懂Vivado时序报告)

本文将详细介绍如何读懂Vivado时序报告,包括报告的基本结构和如何分析报告。

mengzaishenqiu的博客 1万+

python opencv图像叠加/图像融合/mask掩模

1、图像叠加 可以通过OpenCV函数cv.add()或简单地通过numpy操作添加两个图像,res = img1 + img2.两个图像应该具有相同的深度和类型,或者第二个图像可以是标量值. import cv2 import numpy as np img1 = cv2.imread('4.jpg') img2 = cv2.imread('1.jpg') imgadd = cv2.add(cv2.resize(img1,(200,200)),cv2.resize(img2,(200,200))

识物专栏 6万+

《YOLOv8实例分割实战:训练自己的数据集 》(视频课程)

本课程将手把手地教大家使用labelme标注和使用YOLOv8训练自己的数据集,完成一个多目标实例分割实战项目。

bai666ai的博客 790

opencv 提取多边形mask区域

最近在项目中需要提取多边形区域,并传入到算子中计算,故记录一下对多边形mask区域的提取方法。 #include <opencv2\opencv.hpp> using namespace cv; int main() { Mat src = imread(R"(E:\picture\picture_for_test\8.jpg)", 1); // repla...

DAKESLON的博客 5228

【上海大学计算机组成原理实验报告】七、程序转移机制

学习实现程序转移的硬件机制//掌握堆栈寄存器的使用//手动方式实现子程序调用转移过程//手动方式实现子程序返回转移过程//编程实现`OUT`寄存器交替显示`11`和`55`//若要求`11`和`55`各显示`50`次后停机,应该如何修改程序?//根据实验指导书的相关内容,实验箱系统的程序转移硬件机制在于,当`LDPC`有效时,如果此时`DUBS`上的值就是转移的目标地址,则此目标地址被打入`PC`,从而实现程序的转移;若`LDPC`为`0`是附带条件的,就形成“条件转移”。

HackerKevon的博客 2475

第81篇:Vibe Coding时代:LangGraph + Eval评估体系实战,解决 Agent 优化全靠感觉的问题

本文介绍了一个为LangGraph Coding Agent设计的评估体系解决方案。文章首先指出了当前AI Coding Agent开发中的常见问题:优化过程缺乏客观评估标准,导致改进效果难以量化。随后提出了一个完整的评估框架,包括评估指标(任务成功率、质量指标、安全指标、成本指标和流程指标)、项目结构设计和评估案例集。 核心内容包括: 设计了JSON格式的评估案例集,覆盖正常任务、边界任务和高风险场景 实现了模拟Agent输出的演示代码 构建了多维度评分系统,包括关键词匹配、禁用词检测和成本评估 提供了评

sundong_81的博客 48

opencv-python给图片添加半透明mask

示例中,mask为矩形框,如果是不规则点的分割mask,可以使用cv2.fillPoly()函数代替cv2.rectangle(). 原始图片: import numpy as np import os import cv2 def put_mask(img_path,output_fold): # 1.读取图片 image = cv2.imread(img_path) ...

景唯acr 2万+

基于Simulink环境,提供一个关于如何对EMI抑制的DC-DC变换器进行仿真建模的示例

EMI定义:电磁干扰是指任何能中断、阻碍、降低或限制电气设备有效性能的电磁能量。重要性合规性:确保产品符合国际和地方的EMC标准。可靠性:减少因外部或内部EMI导致的系统故障风险。挑战滤波设计:合理设计输入输出滤波器以抑制传导EMI。布局与接地:良好的PCB设计对于减少辐射EMI至关重要。屏蔽:使用金属屏蔽来保护敏感电路不受外界干扰。首先明确要模拟的任务内容。设计一个能够在高频操作下有效抑制EMI的DC-DC变换器。根据工作频率和谐振元件值确定合适的滤波器参数。

xiaoheshang_123的博客 148

使用python的opencv将图像分割后的mask轮廓叠加在原图上

使用python的opencv将图像分割后的mask轮廓叠加在原图上

绯荔榭•少年 2万+

请尽可能地详细说明一个VLA项目的立项训练到落地的全流程

一个机器人VLA项目的全流程是一个复杂的系统工程,它深度融合了机器人学 (Robotics)计算机视觉 (CV)和自然语言处理 (NLP)。其核心挑战在于高质量数据的获取和从仿真到现实的有效迁移。与纯粹的软件AI项目相比,它增加了硬件、物理交互和安全性的维度,但其最终能让AI走出虚拟世界、在物理世界中产生实际价值,这也是其巨大的魅力所在。

具身机器人和通用AI 303

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

[OpenCV实战]13 OpenCV中使用Mask R-CNN进行对象检测和实例分割

目录 1 背景介绍 1.1什么是图像分割和实例分割 1.2 Mask-RCNN原理 2 Mask-RCNN在OpenCV中的使用 2.1 模型下载 2.2 模型初始化 2.3 模型加载 2.4 输出结果处理 2.5 画图 3 结果和代码 3.1 结果 3.2 代码 4 参考 Mask R-CNN具体内容见: https://arxiv.org/pdf/1703.06...

You and Me 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

详解opencv掩膜mask

文章转载自:https://www.cnblogs.com/skyfsm/p/6894685.html 在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢? 一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用。经过查阅大量资料后,也对Mask有一点自己的理解了,下面就说说我的理解。 比如我要对一幅图进行...

Ibelievesunshine的博客 875

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【OpenCV+Cpp】day02图像的掩膜(mask)操作

本文分别介绍了使用传统手工和API对图像进行mask处理的方法

hiconsistent的博客 1372

OpenCV进阶 — 掩膜Mask

在OpenCV中我们经常会遇到一个名字:Mask(掩膜)。很多函数都使用到它,那么这个Mask到底什么呢?一开始我接触到Mask这个东西时,我还真是一头雾水啊,也对无法理解Mask到底有什么用。经过查阅大量资料后,也对Mask有一点自己的理解了,下面就说说我的理解。比如我要对一幅图进行抠图操作,这就要用到Mask了,那我就以抠图为例,解释Mask在里面的作用。先上程序,再一句一句剖析。该程序的功能就是抠出指定区域。

金戈鐡馬 1241

opencv 中的Mask 抠图操作

// masktest.cpp : 定义控制台应用程序的入口点。 // #include "stdafx.h" #include &lt;opencv2/core/core.hpp&gt; #include "opencv2/imgproc/imgproc.hpp" #include &lt;opencv2/highgui/highgui.hpp&gt; #include &lt;iostrea...

liuxiangxxl的博客 4960

opencv中mask操作

其实opencv 里面很多函数都是会带有一个mask 参数的,很多同学都不知道它到底有什么用,好像在实际运用中忽略它也没有什么问题(这不废话嘛,opencv设计师设计它的时候默认就是可以忽略的)。 我在这里就抛砖引玉,详细分析一个常用函数cvcopy里面的mask ,希望可以给大家一点点指引。 cvCopy 这个函数很熟洗哈,用得很多吧哈哈…… 以下内容来子opencv安装文件夹中自带

lien0906的专栏 3658
上一篇: OpenCV实验系列之查表函数LUT()的使用
下一篇: OpenCV实验系列之基本图片操作
Nrush
博客等级 码龄11年 55粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值