OpenCV学习第三篇:图片的掩膜操作(实现图像的对比度调整)
2017-11-10 21:30
1046 查看
掩膜操作实现图像的对比度调整
矩阵的掩膜操作十分简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask也被称为kernel)
I(i,j) = 5* I(i,j)-[I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]
我们的核心思想是对图片中的每个像素都做此操作,就是进行上面的公式!
—–分解形式
—–使用内置掩膜函数
利用getTickCount()函数来获取当前时间, double timeconsume = (getTickCount() - t) / getTickFrequency();计算当前消耗时间!
以下是完整代码:
这里是打印结果:
美女是不是很漂亮嘿嘿,这样才有敲代码的动力啊!一起学习的群号(601408323),有理想的童鞋一起来啊,欢迎!!
矩阵的掩膜操作十分简单,根据掩膜来重新计算每个像素的像素值,掩膜(mask也被称为kernel)
I(i,j) = 5* I(i,j)-[I(i-1,j)+I(i+1,j)+I(i,j-1)+I(i,j+1)]
我们的核心思想是对图片中的每个像素都做此操作,就是进行上面的公式!
—–分解形式
—–使用内置掩膜函数
利用getTickCount()函数来获取当前时间, double timeconsume = (getTickCount() - t) / getTickFrequency();计算当前消耗时间!
以下是完整代码:
#include <opencv2/opencv.hpp> #include <iostream> #include <math.h> using namespace cv; using namespace std; int main(int argc, char** argv) { Mat src, drc; src = imread("F:/识图/645-140GG51042.JPG"); if (src.empty()) { cout << "could not image loading......" << endl; return -1; } //src.cols图形的宽度,src.channels图形的通道数 int cols = src.cols * src.channels(); int offsetx = src.channels();//多通道 //高度 int rows = src.rows; //初始化目标对象,zeros代表和原图像一样 drc = Mat::zeros(src.size(), src.type()); //for (int row = 1; row< rows-1; row++) //{ // //算行的像素 // const uchar* current = src.ptr<uchar>(row-1);//当前的指针所代表的像素 // const uchar* previous = src.ptr<uchar>(row);//前一帧所代表的像素 // const uchar* next = src.ptr<uchar>(row+1);//下一帧所代表的像素 // uchar* output = drc.ptr<uchar>(row);//目标对象像素 // for (int col = 0; col < cols; col++) // { // //算列的像素 // //带入目标公式current[col - offsetx]代表前一个current[col + offsetx]后面一个previous[col]正对着next[col]正对着(正对着代表列一样),同理前面的列不一样 // // saturate_cast<uchar>函数代表把像素范围控制在0-255之内 // output[col] = saturate_cast<uchar>(5 * current[col] - (current[col - offsetx] + current[col + offsetx] + previous[col] + next[col])); // } //} //定义掩膜 Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0); //获取当前时间 double t = getTickCount(); filter2D(src, drc, src.depth(), kernel); //计算消耗时间 double timeconsume = (getTickCount() - t) / getTickFrequency(); cout << "timeScale:" << endl << timeconsume << endl; namedWindow("BUTAFUIL GRIL", CV_WINDOW_AUTOSIZE); imshow("BUTAFUIL GRIL", src); imshow("GOOD GRIL", drc); waitKey(0); return 0; }
这里是打印结果:
美女是不是很漂亮嘿嘿,这样才有敲代码的动力啊!一起学习的群号(601408323),有理想的童鞋一起来啊,欢迎!!
相关文章推荐
- 矩阵的掩膜操作实现图像对比度调整
- OpenCV学习-3:图像亮度和对比度调整
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- OpenCV学习:创建Trackbar & 图像对比度、亮度值调整
- 【OpenCV学习笔记】十二、图像的对比度和亮度调整及图像通道的分离与合并
- opencv学习笔记-4、调整图像亮度和对比度
- javacpp-opencv图像处理之1:实时视频添加文字水印并截取视频图像保存成图片,实现文字水印的字体、位置、大小、粗度、翻转、平滑等操作
- OpenCV学习八:图片的亮度对比度调整
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
- opencv学习笔记之调整图像的亮度与对比度
- OpenCV 学习记录5 图像通道分离、对比度和亮度调整
- opencv 学习第二天 图片图像的基础操作
- OpenCV学习7--调整图像亮度和对比度
- OpenCV学习第七篇:调整图像亮度和对比度
- 【学习OpenCV】图像的亮度/对比度调整
- OpenCV学习3--图像的掩膜操作
- 我的OpenCV学习笔记(三):利用操作像素完成简单的图像处理:加入椒盐噪声、图像翻转、改变对比度、图像锐化
- OpenCV学习笔记(14)创建Trackbar & 图像对比度、亮度值调整
- OpenCV学习笔记(四)—矩阵和图像操作
- Opencv (Opencv2)结合MFC学习数字图像处理---图片解码(2)