当前位置: 首页 > news >正文

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等。

*/

相关文章:

  • open cvMat的使用
  • open cv像素的操作
  • 一个简单的Spring Web Service示例
  • open cv图片混合
  • C++第五章习题
  • open cv对比度与亮度调节
  • POJ 1905
  • open cv绘制形状与文字
  • open cv均值 中值 高斯 双边高斯 滤波及模糊
  • C语言运算符优先级
  • open cv膨胀与腐蚀
  • 浅谈外链因何而存在?
  • open cv形态学操作
  • 微软发布Surface平板电脑 再度挑战苹果
  • open cv提取水平线与垂直线
  • Android Volley源码解析
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • Joomla 2.x, 3.x useful code cheatsheet
  • Just for fun——迅速写完快速排序
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • MQ框架的比较
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • tensorflow学习笔记3——MNIST应用篇
  • TypeScript迭代器
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Yeoman_Bower_Grunt
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 翻译 | 老司机带你秒懂内存管理 - 第一部(共三部)
  • 给Prometheus造假数据的方法
  • 关于字符编码你应该知道的事情
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何用Ubuntu和Xen来设置Kubernetes?
  • 入手阿里云新服务器的部署NODE
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • # include “ “ 和 # include < >两者的区别
  • #1015 : KMP算法
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $NOIp2018$劝退记
  • (1)(1.9) MSP (version 4.2)
  • (八)五种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (四)linux文件内容查看
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)关于pipe()的详细解析
  • (转)关于多人操作数据的处理策略
  • .Mobi域名介绍
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .Net FrameWork总结
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net(C#)中String.Format如何使用
  • /etc/motd and /etc/issue
  • /proc/stat文件详解(翻译)