用一段程序来展示opencv中Mat的基础用法。这个程序将原图以灰度图的方式读入,进行直方图均衡化处理。
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
#include <stdio.h>
using namespace cv;
using namespace std;
int main(int argc, char** argv)
{
//声明原图和目标图以及窗体名称
Mat src, dst;
string source_window = "Source image";
string equalized_window = "Equalized Image";
//以灰度图形式读入lena图像
src = imread(lena_path, IMREAD_GRAYSCALE);
// Mat img = imread(filename, IMREAD_COLOR);
//确认src不为空
if (!src.data)
{
cout << "不能读取文件" << endl;
return -1;
}
//确认为灰度图
CV_Assert(src.channels() == 1);
//显示输入图像
imshow("输入图像", src);
waitKey(0);
// 输出图片的高度与宽度
cout << "图像的高度为:" << src.rows << endl;
cout << "图像的宽度为:" << src.cols << endl;
// 输出指定的像素值
int intensity = src.at<uchar>(100,100);
cout << intensity << endl;
//调用库函数进行直方图均衡化
equalizeHist(src, dst);
// 显示结果
namedWindow(source_window, CV_WINDOW_AUTOSIZE);
namedWindow(equalized_window, CV_WINDOW_AUTOSIZE);
imshow(source_window, src);
imshow(equalized_window, dst);
// 等待用户按键退出程序
waitKey(0);
destroyAllWindows();
return 0;
}