open cv图像矩阵的掩膜操作

本文介绍了OpenCV中的图像掩膜操作,它常用于遥感图像处理,通过一个n*n矩阵来增强图像对比度,提取特定地物或标志。掩膜可以用于提取感兴趣区、屏蔽特定区域、结构特征提取以及创建特殊形状图像。同时,文章还讨论了像素范围处理的saturate_cast()函数,该函数确保像素值在0-255之间。

//获取图像像素指针
//掩膜操作解释
//根据掩膜重新计算每个像素点的值
//通过指针获取mat数据对象
//让rgb的像素值在0-255之间
//衡量程序的执行时间
//参考 http://www.freesion.com/article/7436164618/

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

using namespace cv;
//using namespace std;

int main()
{
	Mat src, dst;//建立mat属性图片 src dst

	src = imread("D:/实验台/机器视觉/测试图片/白人女.png");

	if (!src.data) //若src的数据!时(无法正确加载)
	{
		printf("无法加载");
		return -1;//控制台信息返回-1这个值 提示出现问题的为哪一个函数
	}
	namedWindow("输出图像1", CV_WINDOW_AUTOSIZE);
	imshow("输出图像", src);

	
	int cols = (src.cols - 1) * src.channels();//获取图像的列数 不能忘记通道数 3通道
	int offsetx = src.channels();
	int rows = src.rows;//获取图像的列数
	dst = Mat::ones(src.size(), src.type());//生成一个和图源大小相等 类型相同的 全0型Mat类型矩阵
	//提供一个合适的模板
	for (int row = 1; row < (rows - 1); row++)//列 依次掩盖
	{
		const uchar* previous = src.ptr<uchar>(row - 1);//获取前一行的指针
		const uchar* current = src.ptr<uchar>(row);//获取当前行指针
		const uchar* next = src.ptr<uchar>(row + 1);//获取后一行指针
		uchar* output = dst.ptr<uchar>(row);//获取输出图像
		for (int col = offsetx; col < cols; col++)//行 依次掩盖
		{
			// saturate_cast < uchar>把rgb通道值控制在0-255之间 防止图像溢出 
			output[col] = saturate_cast < uchar>(5* current[col] - (current[col -offsetx] + current[col + offsetx] + previous[col] + next[col]));
		}
	}


	//open cv API掩膜操作

	/*
	I(i,j) = 5*I(i,j) - [I(i-1,j) + I(i+1,j) + I(i,j-1) + I(i,j+1)]		掩码公式
	
	double t = getTickCount();//获得当前时间

	Mat kernel = (Mat_<char>(3, 3) <<   0, -1, 0, 
															 -1, 5, -1,
															  0, -1, 0);
	
	// src.depth()表示与原图深度一样 -1也表示一样
	//OpenCV提高了函数filter2D来实现掩膜操作:
	filter2D(src, dst, src.depth() , kernel);
	double time = (cvGetTickCount() - t) / getTickFrequency();//停止计时
	printf("tim is %.2f",time);*/

    namedWindow("contrast image demo", CV_WINDOW_AUTOSIZE);
	imshow("contrast image demo", dst);
	waitKey(0);
	return 0;
}

/掩膜概念
掩膜是一种图像滤镜的模板,实用掩膜经常处理的是
遥感图像。当提取道路或者河流,或者房屋时,通过
一个n
n的矩阵来对图像进行像素过滤,然后将我们
需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜
。即掩膜用来提升图像的对比度
提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
特殊形状图像的制作。

像素范围处理saturate_cast()
saturate_cast(-100),返回0
saturate_cast(288),返回255
saturate_cast(100),返回100

其中src与dst是Mat类型变量、ddepth表示位图深度,有32、24、8等。

*/

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值