获取图像像素指针 CV_Assert(myImage.depth() == CV_8U); Mat.ptr<uchar>(int i=0) 获取像素矩阵的指针,索引i表示第几行,从0开始计行数。 获得当前行指针const uchar* current= myImage.ptr<uchar>(row ); 获取当前像素点P(row, col)的像素值 p(row, col) =current[col] 像素范围处理saturate_cast<uchar> saturate_cast<uchar>(-100),返回 0。 saturate_cast<uchar>(288),返回255 saturate_cast<uchar>(100),返回100 这个函数的功能是确保RGB值得范围在0~255之间 掩膜操作实现图像对比度调整-红色是中心像素,从上到下,从左到右对每个像素做同样的处理操作,得到最终结果就是对比度提高之后的输出图像Mat对象 |
5*I 代表需要处理的图像
(i,j)代表一个像素 i:行 j:列
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
/*
对比度提高 算法 并且学习通过指针访问像素数据
*/
int main() {
Mat src = imread("0.jpg");
Mat dst;
if (!src.data) {
return 0; //利用data判断.如果没有数据直接退出
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
int cols = (src.cols-1) * src.channels();
//图形的宽度=cols乘以图像的通道数
int offsetx = src.channels(); //获取通道数
int rows = src.rows;
//图形的高度
dst = Mat::zeros(src.size(), src.type());
//zeros 同步原图大小
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++)
{
//套用公式
output[col] = saturate_cast<uchar> (5 * current[col] - (current[col - offsetx] + current[col+offsetx ]+previous[col]+next[col]));
}
}
namedWindow("contrast image demo", CV_WINDOW_AUTOSIZE);
//创建新窗口
imshow("contrast image demo",dst);
//显示新图像
waitKey(0);
return 0;
}
函数调用filter2D功能
定义掩膜:Mat kernel = (Mat_<char>(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
filter2D( src, dst, src.depth(), kernel );其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等。
#include <opencv2/opencv.hpp>
#include <iostream>
using namespace cv;
/*
对比度提高 通过函数调用filter2D功能直接实现
*/
int main() {
Mat src = imread("0.jpg");
Mat dst;
if (!src.data) {
return 0; //利用data判断.如果没有数据直接退出
}
namedWindow("input image", CV_WINDOW_AUTOSIZE);
imshow("input image", src);
Mat kernel = (Mat_<char>(3, 3) <<
0, -1, 0,
-1, 5, -1,
0, -1, 0);
//定义掩膜
filter2D(src, dst, src.depth(), kernel);
//其中src与dst是Mat类型变量、src.depth表示位图深度,有32、24、8等。
namedWindow("contrast image demo", CV_WINDOW_AUTOSIZE);
//创建新窗口
imshow("contrast image demo",dst);
//显示新图像
waitKey(0);
return 0;
}