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

这篇具有很好参考价值的文章主要介绍了OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、掩膜(Mask)是什么
(1)从物理的角度来看:

光刻是指利用光学复制的方法,把pcb电路图,印制在光敏记录材料上(这个光敏材料就是很薄的一层膜,我称之为掩膜Mask),用掩膜Mask 遮盖硅片,把掩膜Mask 上精细的电路图,通过光线的曝光印制到硅片上,来制作芯片;

(2)图像处理中的掩膜Mask

图像掩膜与其类似,用选定的图像作为遮挡,来控制图像处理的区域;

(3)掩膜的用法:
  • 提取感兴趣区:用预先制作的感兴趣区掩膜 与 待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0;
  • 屏蔽作用:用掩膜对图像上某些区域作屏蔽,使其不参加处理,仅对屏蔽区外作处理;
  • 结构特征提取:用相似性变量或图像匹配方法检测和提取图像中与掩膜相似的结构特征;
  • 特殊形状图像的制作;
(4)掩膜Mask 的运算:

一个3 * 3的图像 与 一个3 * 3的掩膜进行运算,得到的结果图像如下:

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用,opencv,opencv,计算机视觉

2、setTo()函数:将图像的像素值,设置为某个值;
(1)函数使用:
src.setTo(value);		// 将图像src的值,全部设成value
src.setTo(value, src<m);	// src像素值小于m的像素值,全部设成value
src.setTo(value, src>m);	// src像素值大于m的像素值,全部设成value
src.setTo(dst, src<m);		// src中的像素值,当其值小于m的时候,就将该值用dst中相应位置的值进行替换
3、copyTo()函数:将一张图像复制到另一张图像上;
(1)函数使用:
函数原型1void copyTo( OutputArray m ) const;
举例:image_in.copyTo(image_out);
解释:把image_in这张图复制到image_out上;

函数原型2void copyTo( OutputArray m, InputArray mask ) const;
举例:image_in.copyTo(image_out,mask);
解释:image_in图像与掩膜mask进行,逻辑与 &运算,将运算后的图像复制到image_out上;(image_in对应mask中像素值为0的像素点都不会贴到image_out上)
4、clone()函数:克隆一个图像
(1)函数使用:
Mat A  = Mat::ones(4,5,CV_32F);
Mat B = A.clone()	// clone() 是完全的深拷贝,在内存中申请新的空间;
Mat C;
A.copyTo(C);		// 此处的C矩阵大小与A大小不一致,则申请新的内存空间,并完成拷贝,等同于clone()
Mat D = A.col(1);
A.col(0).copyTo(D)	// 此处D矩阵大小与A.col(0)大小一致,因此不会申请空间,而是直接进行拷贝,相当于把A的第1列赋值给D
5、inRange()函数:提取指定色彩范围区域(用法是将一副彩色图像或者一副单通道图像转换为二值图像)
  • inRange()函数输出的是一幅二值化之后的图像,将阈值区间内的像素值,设置为白色(255),不在阈值区间内的像素值,设置为黑色(0);
  • inRange()函数,应在hsv色彩空间下处理图像,所以输入的图像需要先转化为hsv图像(因为在RGB色彩空间下,颜色值分布的太多太广,我们很难准确的去提取选定区域的像素值,但在hsv色彩空间下只有h和s这两个控制颜色,很容易对颜色进行提取,所以当你看到一个单一颜色的时候,你想要寻找到它,你的第一反应应该是,将他转换到辨识度比较高的色彩空间下,比如hsv,hsi,lab等,处理完之后再返回rgb就可以了);
(1)函数原型
inRange(hsv, Scalar(hmin, smin, vmin), Scalar(hmax, smax, vmax), dst);
(2)参数解释
  • hsv:输入要处理的图像,可以为单通道或多通道图像,先转化为hsv图像,使用cvtColor();
  • Scalar(hmin, smin, vmin):下边界数组或标量,输入hsv图像像素值,小于此值,设置为黑色(0),在区间范围内设为白色(255);
  • Scalar(hmax, smax, vmax):上边界数组或标量,输入hsv图像像素值,大于此值,设置为黑色(0),在区间范围内设为白色(255);
  • dst:输出图像,与输入图像hsv 尺寸相同且为CV_8U 类型;
(3)示例
  • 针对单通道图像:一幅灰度图像的某个像素的灰度值在指定的高、低阈值范围之内,则在dst图像中令该像素值为255,否则令其为0,这样就生成了一幅二值化的输出图像;
  • 针对三通道图像:每个通道的像素值都必须在规定的阈值范围内;
  • Scalar(hmin, smin, vmin),Scalar(hmax, smax, vmax)里hsv值如何确定,这里我的方法是先得到RGB,再通过菜鸟教程工具来转化得到hsv,确定我要提取图像的范围,这样将范围填写进Scalar(h, s, v),就可以了;
  • 将RGB输入到菜鸟工具后,得到的hsv是小数,我们将h乘以180,s和v乘以255得到想要的Scalar(h, s, v);
比如将下图绿色区域,提取出来:

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用,opencv,opencv,计算机视觉

#include <opencv2\opencv.hpp>
#include <iostream>
#include <demo.h>

using namespace cv;
using namespace std;

int main() {
	// 读取图像,BGR存储在Mat矩阵里
	Mat src = cv::imread("C:\\cpp\\image\\green.png");
	if (src.empty()) {
		printf("could not load image..../n");
		return -1;
	}
	namedWindow("src", WINDOW_NORMAL);
	namedWindow("hsv", WINDOW_NORMAL);
	namedWindow("dst", WINDOW_NORMAL);

	imshow("src", src);
	// 1、先转化为hsv图像
	Mat hsv;
	cvtColor(src, hsv, COLOR_BGR2HSV);
	imshow("hsv", hsv);
	// 2、再利用inRange()函数对图像二值化
	Mat dst;
	inRange(hsv, Scalar(45, 254, 204), Scalar(46, 255, 206), dst);
	imshow("dst", dst);

	waitKey();
	destroyAllWindows();
	return 0;
}

运行结果:

OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用,opencv,opencv,计算机视觉文章来源地址https://www.toymoban.com/news/detail-561251.html

到了这里,关于OpenCV中掩膜(Mask)、setTo()、copyTo()、clone()、inRange()的定义与使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenCV中inRange函数

    在OpenCV中, inRange 函数用于根据颜色范围从图像中提取特定的颜色区域。 这个函数检查输入图像中的每个像素,如果像素值位于指定的范围内,则在输出图像(或掩码)中对应位置的像素被设置为白色(或者说是255),否则被设置为黑色(0) 。这种方法在处理颜色过滤、颜

    2024年02月20日
    浏览(37)
  • python-opencv-cv2.inRange函数()函数详解

    cv2.inRange( hsv, lower_red, upper_red ) 参数 描述 hsv 指的是原图 lower_red 指的是图像中低于这个lower_red的值,图像值变为0(黑) upper_red 指的是图像中高于这个upper_red的值,图像值变为0(黑) lower_red~upper_red 在lower_red~upper_red之间的值变成255(白)

    2024年04月09日
    浏览(38)
  • 入门指南:深入解析OpenCV的copyTo函数及其与rect的应用场景

    OpenCV是一个功能强大的开源计算机视觉库,广泛应用于图像处理和计算机视觉任务。在OpenCV中,copyTo函数是一个重要的图像处理函数,它允许我们在不同的图像之间复制像素数据,同时结合rect(矩形)的使用,可以实现更多有趣的功能。本文将深入讲解copyTo函数的用法,并提

    2024年02月15日
    浏览(41)
  • OpenCV中使用Mask R-CNN实现图像分割的原理与技术实现方案

    本文详细介绍了在OpenCV中利用Mask R-CNN实现图像分割的原理和技术实现方案。Mask R-CNN是一种先进的深度学习模型,通过结合区域提议网络(Region Proposal Network)和全卷积网络(Fully Convolutional Network),实现了对图像中物体的精确分割。本文首先阐述了Mask R-CNN的原理,然后详细

    2024年02月03日
    浏览(39)
  • Opencv C++ SIFT特征提取(单图像,多图像)+如何设置阈值+如何对文件夹进行批处理+如何设置掩膜裁剪影像

    SIFT(Scale-Invariant Feature Transform)是一种用于图像处理和计算机视觉的特征提取算法。由David Lowe于1999年首次提出,它是一种非常有效的局部特征描述符,具有尺度不变性、旋转不变性和对部分遮挡的鲁棒性。 SIFT特征提取的主要步骤包括: 尺度空间极值检测(Scale-Space Extrem

    2024年01月19日
    浏览(42)
  • OpenCV制作Mask图像掩码

    一、掩膜(mask) 在有些图像处理的函数中有的参数里面会有mask参数,即此函数支持掩膜操作,首先何为掩膜以及有什么用,如下: 数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩

    2024年02月04日
    浏览(29)
  • OpenCV:绘制图像中mask的最小外接矩形

    在计算机视觉和图像处理中,我们经常需要计算直线与外接矩形边的交点。这在进行边缘检测、图像分割、目标跟踪等任务时非常有用。本文将介绍如何使用OpenCV和NumPy计算直线与外接矩形边的交点,并展示如何在实际图像中绘制直线。 使用OpenCV的findContours函数寻找图像中的

    2024年01月24日
    浏览(49)
  • OpenCvSharp学习笔记13--使用InRange进行HSV阈值过滤、渐变色生成

    HSV色彩空间介绍 使用InRange操作阈值 基于HSV色彩空间的像素值范围检测对象 生成渐变色 HSV(Hue, Saturation, Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间, 也称六角锥体模型(Hexcone Model)。HSV色系对用户来说是一种直观的颜色模型,对于颜色,人们直观的会问”

    2024年02月04日
    浏览(48)
  • opencv的Mask操作,选择图片中感兴趣的区域

    最近做目标检测任务的时候,需要对固定区域的内容进行检测,要用到opencv的mask操作,选择图片固定的区域 可以对ROI检测香烟,检测之后在ROI的香烟上画上框,再roi+background得到完整图片

    2024年02月12日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包