open cv图像矩阵的掩膜操作
//获取图像像素指针
//掩膜操作解释
//根据掩膜重新计算每个像素点的值
//通过指针获取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等。
*/