提高图像对比度
1.矩阵的掩膜操作filter2D():获取图像像素指针,掩膜操作。
2.staturate_cast<uchar>() #使像素值在0-255之间。
2.统计时间,getTickCount()
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace std;
using namespace cv;
int main()
{
Mat src;
src = imread("/Users/ming/Documents/test.jpg");
if (src.empty()){
printf("cannot load the image...");
return -1;
}
namedWindow("src img", CV_WINDOW_AUTOSIZE);
imshow("src img", src);
cout << src.size() << endl;
Mat dst;
/* 掩膜的实现 */
// dst = Mat::zeros(src.size(), src.type());
// int rows = src.rows;
// int cols = (src.cols-1) * src.channels();
// int channel = src.channels();
// cout << channel << endl;
// for (int i=1; i<(rows-1); i++){
// const uchar* before = src.ptr<uchar>(i-1);
// const uchar* now = src.ptr<uchar>(i);
// const uchar* after = src.ptr<uchar>(i+1);
// uchar* output = dst.ptr<uchar>(i);
// for (int j=channel; j<cols; j++){
// output[j] = saturate_cast<uchar>(5*now[j]-(now[j-channel] + now[j+channel] + before[j] + after[j]));
// }
// }
double t_start, t_end, t_cost;
t_start = getTickCount(); //统计运行时间
Mat kernel = (Mat_<char>(3,3) << 0,-1,0,-1,5,-1,0,-1,0); //核的大小
/* 掩膜API接口filter2D实现 */
// filter2D(src, dst, src.depth(), kernel); //src.depth()可以写-1
filter2D(src, dst, -1, kernel);
t_end = getTickCount();
t_cost = t_end - t_start;
t_cost = t_cost / getTickFrequency();
printf("time cost: %2.f", t_cost);
namedWindow("after filter", CV_WINDOW_AUTOSIZE);
imshow("after filter", dst);
waitKey(0);
}