像素指针、像素范围saturate_cast <uchar>、矩阵掩膜操作
文章目录
- 获取图像像素指针
- 像素范围处理saturate_cast < uchar >
- 矩阵掩膜操作
- 作用
- 操作示意
- 代码实现
- 函数filter2D实现掩膜操作
获取图像像素指针
CV_Assert(myImage.depth() == CV_8U);
Mat.ptr< uchar >(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。(uchar是一个字节)
- 获得当前行指针const uchar* current= myImage.ptr< uchar >(row);
- 获取当前像素点P(row, col)的像素值 p(row, col) =current[col]
dst(destination):目标图片
src(source):源图像
像素范围处理saturate_cast < uchar >
简单介绍:saturate_cast< uchar >用于像素范围处理:小于0则返回0、大于255则返回255、0-255之间返回原值。
saturate_cast< uchar >(-100),返回 0。
saturate_cast< uchar >(288),返回255。
saturate_cast< uchar >(100),返回100。
这个函数的功能是确保RGB值得范围在0~255之间。
矩阵掩膜操作
作用
1.提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
2.屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
3.结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
4.特殊形状图像的制作。
引用链接:https://zhuanlan.zhihu.com/mengcius-opencvbase
操作示意
代码实现
#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace cv;int main(int argc, char** argv) {Mat src = imread("C:/Users/admin/Desktop/lenna.png");//读入图片Mat dst;//提高对比度之后图片的矩阵if (src.empty()){ // 特判printf("cannot see\n");return -1;}namedWindow("opencv setup1", CV_WINDOW_AUTOSIZE);imshow("opencv setup1", src);int cols = (src.cols - 1) * src.channels(); // 定义列数(因为RGB是3个通道,所以col要乘上通道数)int offsetx = src.channels(); // 通道数int rows = src.rows; // 行数dst = Mat::zeros(src.size(), src.type());//遍历每一行,第一行和最后一行不用处理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);//定义目标指针的当前行指向output指针uchar* output = dst.ptr<uchar>(row);//遍历每一列,因为RGB是3个通道for (int col = offsetx; col < cols; col++) {//掩膜操作的新像素值=某像素值*系数 - 其上下相邻行和左右相邻通道的像素值(RGB是3个通道 )output[col] = saturate_cast<uchar>(5 * current[col] - (previous[col] + next[col] + current[col - offsetx] + current[col + offsetx]));}}//输出目标图像namedWindow("opencv setup2", CV_WINDOW_AUTOSIZE);imshow("opencv setup2", dst);waitKey(0);system("pause"); //以便在退出程序前调用系统的暂停命令暂停命令行}
函数filter2D实现掩膜操作
可直接用opencv的API做掩膜操作来提高对比度。
filter2D( src, dst, src.depth(), kernel ): 其中src与dst是Mat类型变量,src.depth表示位图深度,有32、24、8等,直接写-1表示与输入图深度一致。(filter滤波器)
#include <opencv2/opencv.hpp>
#include<iostream>
#include<math.h>
#include<stdlib.h>
using namespace cv;int main(int argc, char** argv) {Mat src = imread("C:/Users/admin/Desktop/lenna.png");//读入图片Mat dst;//提高对比度之后的图片矩阵if (src.empty()){ // 特判printf("cannot see\n");return -1;}namedWindow("opencv setup1", CV_WINDOW_AUTOSIZE);imshow("opencv setup1", src);Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//定义掩膜filter2D(src, dst, src.depth(), kernel);//输出目标图像namedWindow("opencv setup2", CV_WINDOW_AUTOSIZE);imshow("opencv setup2", dst);waitKey(0);system("pause"); //以便在退出程序前调用系统的暂停命令暂停命令行}
像素指针、像素范围saturate_cast <uchar>、矩阵掩膜操作相关推荐
- 【opencv学习笔记】003之图像像素基本操作(获取像素指针、范围处理)及掩膜操作(filter2D)详解
目录 一.前言 二.图像像素基本操作 1.获取图像像素指针 1.获取图像像素指针是什么? 2.相应API 3.获取目的 2.像素范围处理saturate_cast 1.像素范围处理是什么? 2.像素范 ...
- opencv矩阵掩膜操作(提高图片对比度)
#include <opencv2/opencv.hpp> #include<iostream>using namespace cv;int main() {Mat src, ...
- 【opencv4.3.0教程】07之像素基本操作 1 获取像素指针及控制像素范围
目录 一.前言 二.温故知新--基本数据类型 1.最基本之Mat类 2.四大天王之Point_.Size_.Rect_.Scalar_ 3.各大分堂主 三.像素及相关概念 1.像素 2.灰度图与彩图 ...
- 【OpenCV学习】第2课:图片锐化 - 矩阵的掩膜操作(卷积中的锐化算子)
仅自学做笔记用,后续有错误会更改 理论 这里用到的掩膜,其实只是数学中卷积的概念的一个应用 上下左右4个像素值分别乘以-1,再加上中间像素值乘以5的值,最后得到的值再重新赋值给中间像素,这就是掩膜的一 ...
- OpenCV图像处理使用笔记(二)——图像矩阵的掩膜操作
前言 1.数字图像处理中的掩膜的概念是起源于于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形"底片"称为掩膜(也称作"掩模" ...
- 独家|OpenCV 1.3 矩阵的掩膜操作(附链接)
翻译:陈之炎 校对:王可汗.林夕本文约1600字,建议阅读5分钟本文为大家介绍了 OpenCV 矩阵的官方教程. 矩阵的掩膜操作(mask)并不难.主要思路为:根据掩膜矩阵(也称为内核kernel)重 ...
- 【OpenCV入门学习笔记1】:Mat对象的指针操作和掩膜操作
b站:https://www.bilibili.com/video/BV1uW411d7Wf?p=5 下面是我在b站上看视频学习的笔记和操作的示例代码 实例代码 #include<opencv2 ...
- 转载:矩阵的掩膜操作实现图像对比度调整
矩阵的掩膜操作实现图像对比度调整 hb707934728 2017-07-04 13:54:17 1170 收藏 最后发布:2017-07-04 13:54:17首发:2017-07-04 13:54 ...
- python 生成excel像素画_【译】只用 CSS 就能做到的像素画/像素动画
只用 CSS 就能做到的像素画/像素动画 这篇文章将会介绍只用 CSS 就能制作像素画·像素动画的方法.虽说纯 CSS 就能做到,但是为了更高的可维护性,也会顺便介绍使用 Sass 的制作方法. 上面 ...
最新文章
- JAVA语法——汉诺塔问题
- java 抽象类继承抽象类_Java之继承、抽象类、接口篇
- 图书漂流系统的设计和研究_研究在设计系统中的作用
- web开发课程培训,10大前端常用算法,学习路线+知识点梳理
- PHP json_encode后的数据有的大括号于中括号
- 请求报文的方法及get与post的区别
- html目录参数加密,从HTML文件中取出JS加密需要的参数,并调用js内的加密算法
- 利用【监听器】动态加载Log4j配置文件
- 三菱有C语言PLC控制器,三菱PLC可程序设计控制器系列软件介绍
- Python Pytest自动化测试 获取测试用例执行结果
- 测试5g网速的软件排行榜,2021网络测速app排行榜-手机网速测试软件推荐
- 强大的Windows 10数字权利获取工具HWIDGEN
- QMT量化交易网格交易 源码
- 从通信的角度理解现场总线
- 高效能人士的七个习惯——由内而外全面造就自己
- 2021中考成绩查询高考,2021年中考成绩公布时间
- 信创云元年,易捷行云EasyStack发布新一代全栈信创云
- 分布式系统的特点及问题
- 匿怨而友其人,左丘明耻之,丘亦耻之。我不是圣人,我假装什么都没发生。
- 您使用的私钥格式错误,请检查RSA私钥配置,charset = utf-8