IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 掩膜操作(opencv学习记录--1) -> 正文阅读

[人工智能]掩膜操作(opencv学习记录--1)

1.案例作用

利用掩膜操作实现加强图像对比度

2.案例实现

掩膜操作是指根据掩膜矩阵(也称作核kernel)重新计算图像中每个像素的值
掩膜矩阵中的值表示了邻近像素值(包括该像素自身的值)对新像素值有多大的影响。从数学的观点来看,我们用自己设置的权值,对像素领域内的值做了个加权平均。

比如,下面这个公式表示用5倍当前像素的值减去该像素上、下、左、右四个像素值和,得到的结果赋值给当前像素。使用该公式可以用于提升图像的对比度。调节I(i,j)I(i,j)的系数权重可以得到不同的对比度提升效果。
I ( i , j ) = 5 ? I ( i , j ) ? [ I ( i ? 1 , j ) + I ( i + 1 , j ) + I ( i , j ? 1 ) + I ( i , j + 1 ) ] I(i,j)=5?I(i,j)?[I(i?1,j)+I(i+1,j)+I(i,j?1)+I(i,j+1)] I(i,j)=5?I(i,j)?[I(i?1,j)+I(i+1,j)+I(i,j?1)+I(i,j+1)]
上面的公式可以用掩膜矩阵表示成如下的形式。
在这里插入图片描述

3.代码部分

#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>

using namespace cv;
using namespace std;

//导入自己想要的东西--图片,视频,摄像头/

//iamge

int main(int argc, char** argv)
{
	string path = "xxxx.jpg";
	//这里不能用img直接操作,因为每一点像素值的计算都和周围的有关,
	//如果直接改变,那么重新计算某个点的像素时,用过的周围的点的一部分像素值也已经改变了,
	//计算就会不准了。可以直接试试改img,然后看结果哦
	Mat img, dest;
	img = imread(path);
	
	//如果没有加载出图像,就cout(鲁棒性)
	if (!img.data)
	{
		cout << "add img error!" << endl;
		return -1;
	}
	imshow("img", img);

	/*
	//掩膜操作
	//获取图像高度和宽度
	dest = Mat::zeros(img.size(), img.type());//初始化一个和源图像大小和类型相等的全0矩阵	
	int cols = (img.cols - 1) * img.channels();//行数*RGB通道
	int offsetx = img.channels();
	int rows = img.rows;//列数
	//行数和列数后面都有一个s!!
	
	for (int row = 1; row < rows - 1; row++)//可以通过调节两个for的范围得到你想改的区域
	{
		const uchar* previous = img.ptr<uchar>(row - 1);//指向上一行
		const uchar* current = img.ptr<uchar>(row);//当前的指向的行
		const uchar* next = img.ptr<uchar>(row + 1);//指向下一行
		uchar* output = dest.ptr<uchar>(row);//指向新的图像(掩膜后)
		for (int col = offsetx; col < cols ; col++)
		{
			output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col]));//中间的像素值*5减去周围的像素值--前面是防止像素超过256
		}
	}
	*/

	//官方库实现
	Mat kernel = (Mat_<char>(3, 3) << 0,-1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(img,dest,img.depth(),kernel);//src.depth()表示位图深度,和type相关

	namedWindow("img_next", CV_WINDOW_AUTOSIZE);
	imshow("img_next", dest);
	waitKey(0);
	return 0;
}

4.总结

1.掩膜操作简洁说法

将某一块的像素值*同样大小一个矩阵并将值赋作为像素值赋值给中间的那一个点。 改变了那一个点的像素和周围点(包括自己)的像素的关系

2.改变对比度只是掩膜操作的功能之一

掩膜还有很多其他的作用
改变对比度也可以不止用掩膜这一种操作(而且没搜到掩膜可以动态调整图像的对比度,有兄弟感兴趣可以搜搜然后告诉我哇 ^ - ^ )

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-12-07 12:01:51  更:2021-12-07 12:01:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 2:38:43-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码