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]
lsaturate_cast<uchar>(-100),返回 0。
lsaturate_cast<uchar>(288),返回255
lsaturate_cast<uchar>(100),返回100
l这个函数的功能是确保RGB值得范围在0~255之间
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
int main(void) {
Mat src, dst;
src = imread("C:/Users/Robin/Pictures/test.jpg");
if (!src.data) {
std::cout << "could load image..\n";
return -1;
}
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());
for (int row = 1; row < (rows - 1); row++) {
const uchar* current = src.ptr<uchar>(row);
const uchar* previous = src.ptr<uchar>(row - 1);
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;
}