矩阵的掩膜操作

矩阵的掩膜操作 根据掩膜重新计算每个像素的像素值

1、掩膜的定义
用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。用于覆盖的特定图像或物体称为掩模或模板。光学图像处理中,掩模可以是胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。

2 、数字图像处理中 ,图像掩模主要用于
提取感兴趣区 ,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
掩膜是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。

屏蔽作用 ,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
结构特征提取 ,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
特殊形状图像的制作。
5 实现图像对比度调整




3、各种掩膜有不同的作用
3x3 
邻域平均 全是1  

3x3高斯均值滤波器 
filters(0) = 1: filters(1) = 2:filters(2) = 1 
filters(3) = 2: filters(4) = 4: filters(5) = 2 
filters(6) = 1: filters(7) = 2: filters(8) = 1  

拉普拉斯1型滤波器  高通边缘检测器掩膜 
filters(0) = -1: filters(1) = 0: filters(2) = -1 
filters(3) = 0: filters(4) = 4: filters(5) = 0 
filters(6) = -1: filters(7) = 0: filters(8) = -1  

锐化   (中锐化:filters(4) = 5 , 高锐化:filters(4) = 6)
filters(0) = 0: filters(1) = -1: filters(2) = 0 
filters(3) = -1: filters(4) = 6: filters(5) = -1 
filters(6) = 0: filters(7) = -1: filters(8) = 0 

垂直掩膜 
filters(0) = 3: filters(1) = -6: filters(2) = 3 
filters(3) = 3: filters(4) = -6: filters(5) = 3 
filters(6) = 3: filters(7) = -6: filters(8) = 3
 
水平掩膜 
filters(0) = 3: filters(1) = 3: filters(2) = 3 
filters(3) = -6: filters(4) = -6: filters(5) = -6 
filters(6) = 3: filters(7) = 3: filters(8) = 3  

对角线掩膜 
filters(0) = 3: filters(1) = 3: filters(2) = -6 
filters(3) = 3: filters(4) = -6: filters(5) = 3 
filters(6) = -6: filters(7) = 3: filters(8) = 3  

高斯滤镜5x5 
f(0) = 1:   f(1) = 4:     f(2) = 6:     f(3) = 4:     f(4) = 1
f(5) = 4:   f(6) = 16:   f(7) = 24:   f(8) = 16:   f(9) = 4 
f(10) = 6: f(11) = 24: f(12) = 36: f(13) = 24: f(14) = 6 
f(15) = 4: f(16) = 16: f(17) = 24: f(18) = 16: f(19) = 4 
f(20) = 1: f(21) =  4: f(22) =  6:   f(23) = 4:   f(24) = 1


4、 用编程定义掩膜(kernel) :通过指定的数据值、数据范围、有限或无限值、感兴趣区和注释文件来定义图像掩模,也可以应用上述选项的任意组合作为输入来建立掩模。
Mat src = (Mat_<uchar>(3,3) << 1,26,7,
     4,3,1,
3,45,6); //常用此函数来定义吧
//对于小的矩阵来说你可以使用逗号隔开的初始化函数:
注意事项:1、 括号一定括上,否则报错。
2、 定义多少,<<后面的数字就填多少,不能多填也不能少填。



filter2D 一个函数即可搞定 膜操作

参数介绍:
第一个参数为源图像。
第二个参数为最终输出的图像,需要再定义一个Mat类变量。
第三个参数为像素深度,两个像素深度一定要相同,否则出错。
src.depth()   或者     -1
第四个参数为掩膜。

代码示例如下:

#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
#include <stdio.h>

using namespace cv;

int main(int argc, char** argv)
{
	Mat src = imread("liaowenbin.bmp");
	namedWindow("open picture",WINDOW_AUTOSIZE);
	imshow("open picture",src);


	double t = getTickCount();    //***计算时间语句
	Mat kernel = (Mat_<char>(3,3) <<       //定义一个掩膜
		         0,-1,0,
		        -1,5,-1,
		         0,-1,0);	
	Mat dst;
	filter2D(src,dst,src.depth(), kernel);//掩膜操作
	
	double time = (getTickCount()-t) / getTickFrequency();//***
	std::cout << "usetime : " << time << std::endl;//***
	//printf("usetime :%0.2f \n",time);

	namedWindow("Output Picture",WINDOW_AUTOSIZE);
	imshow("Output Picture", dst);

	waitKey(0);
	return 0;
}


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
OpenCV中的操作是一种图像处理技术,用于将图像的某些区域设置为特定的值或通过其他方式对其进行操作通常是一个与原始图像具有相同大小的二进制图像或具有相同通道数的矩阵。 要进行操作,可以使用以下步骤: 1. 创建一个与原始图像大小相同的图像,其中包含要操作的区域。可以使用OpenCV提供的函数(例如cv2.threshold())或手动创建二进制图像。 2. 将应用于原始图像。可以使用OpenCV中的位运算函数(例如cv2.bitwise_and())将与原始图像进行逐位与操作,以保留中的像素。 以下是一个简单的示例代码,演示如何进行操作: ```python import cv2 import numpy as np # 读取原始图像 image = cv2.imread('image.jpg') # 创建图像 mask = np.zeros(image.shape[:2], dtype=np.uint8) cv2.circle(mask, (image.shape[1]//2, image.shape[0]//2), 100, (255), -1) # 应用 masked_image = cv2.bitwise_and(image, image, mask=mask) # 显示结果 cv2.imshow('Original Image', image) cv2.imshow('Masked Image', masked_image) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上面的代码中,我们首先加载原始图像,然后创建一个与原始图像相同大小的图像。在这个例子中,我们使用`cv2.circle()`函数创建了一个圆形。 然后,我们使用`cv2.bitwise_and()`函数将应用于原始图像。最后,我们显示原始图像和应用后的图像。 请注意,可以用于各种不同的图像处理任务,例如图像分割、背景提取和特定区域的操作等。上述示例只是其中的一种用法,具体取决于您的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖零猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值