opencv掩膜操作
来源:互联网 发布:平方c语言 编辑:程序博客网 时间:2024/04/28 05:21
所谓的掩膜操作,是用来提高图像的对比度。掩膜操作有一个简单的公式:
在进行掩膜操作之前,必须需要了解下面几个opencv的函数:
(1)int Mat对象.channels();//获取图像的通道数,不同类型的图像通道数不一样,以BGR为例,一张图按行按列均匀分布着像素点,但是每个像素点由三种颜色组成(灰度图只有一种颜色),相当于三个按行排列的通道,所以在处理图片像素时,往往列数要乘以通道数。
(2)uchar* Mat对象.ptr<uchar>(int row);//获取图像的行指针,相当于把图片的行像素看成一行数组。
(3)Mat Mat对象.zeros(Mat对象.size(),Mat对象.type());//用来生成一个相同规格的图像对象,内容为0。
(4)int saturate_cast<uchar>(int num);//相当于一个判断,如果num大于255,返回255,如果num小于0,返回0,如果num在0到255范围内,返回num,从而保证像素值正常,没有这个判断,掩膜处理后图像很可能会出现不正常显示。
除了自己手写掩膜外,也可以用filter2D函数来实现掩膜操作。
代码如下:
#include<opencv2\opencv.hpp>using namespace cv;int main(){Mat scr, dst;scr = imread("2.jpg", 1);imshow("原图", scr);if (!scr.data){return -1;}dst = scr.zeros(scr.size(), scr.type());int offset = scr.channels();//图像通道数int rows = scr.rows, cols = scr.cols*offset;//列一定要乘以通道数for (int r = 1; r < rows-1; r++){uchar* last = scr.ptr<uchar>(r - 1);//获取行指针uchar* now = scr.ptr<uchar>(r);uchar* next = scr.ptr<uchar>(r + 1);uchar* dst_now = dst.ptr<uchar>(r);for (int c = offset; c < cols - offset; c++)dst_now[c] = saturate_cast<uchar>(5 * now[c] - (now[c - offset] + now[c + offset] + last[c] + next[c]));}/*Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);filter2D(scr, dst, scr.depth(), kernel);*/imshow("处理后", dst);waitKey();return 0;}效果如下:
处理前
处理后
0 0
- opencv掩膜操作
- OpenCV--矩阵的掩膜操作
- 【OpenCV】矩阵掩模操作
- OpenCV 对矩阵的掩模操作
- opencv-图像像素值矩阵掩膜操作之锐化滤波
- 关于opencv 图像掩膜操作srcImage.copyto(dstImage, mask)说明
- OpenCV学习第三篇:图片的掩膜操作(实现图像的对比度调整)
- OpenCV----矩阵操作
- OpenCV----视频序列操作
- OpenCV 矩阵操作 CvMat
- OPENCV矩阵操作
- opencv-矩阵操作总结
- OpenCV形态学操作
- OpenCV 矩阵操作
- OpenCV基本操作
- OPENCV 矩阵操作
- OpenCV数据读写操作
- Opencv矩阵操作
- 算法提高 统计单词数
- 算法题-素数求和
- ACM递推递归练习H三国佚事——巴蜀之危
- 《抽象类和接口的语法的区别》
- Java基础总结(二)----集合、多线程、io、虚拟机等
- opencv掩膜操作
- Java死锁范例与死锁分析
- HDOJ 1075 What Are You Talking About
- Unity鼠标图标添加
- 数字图像处理中不同的低通滤波器的区别以及cut-off frequency 对于图像的影响
- 004页面载入等待界面
- (背包一)0-1背包问题
- golang解析html网页
- 子元素使用float后如何撑开父div