OpenCV矩阵的掩膜操作
获取图像像素指针
- CV_Assert(mylmage.depth() == Cv 8U);
- Mat.ptr(int i=0)获取像素矩阵的指针,索引i表示第几行,从o开始计行数。
- 获得当前行指针const uchar* current=mylmage.ptr(row );
- 获取当前像素点P(row, col)的像素值p(row, col) =current[col]
像素处理范围
saturate_cast
- saturate cast ( -100 ) ,返回0
- saturate cast ( 288 ),返回255
- saturate cast ( 100 ) ,返回100
- 这个函数的功能是确保RGB值得范围在0~255之间
函数调用filter2D功能
掩膜操作提高图像对比度
1.定义掩膜:Mat kernel=(Mat_(3,3)<<0,-1,0,-1,5,-1,0,-1,0);
2.filter2D( src, dst, src.depth(), kernel );其中src与dst是Mat类型变量、 src.depth表示位图深度,有32、24、8等。
补充:获取时间消费
double t = getTickCount();
double timeconsume = (getTickCount() - t) / getTickFrequency();
printf("time consume %.2f", timeconsume);
小demo
#include<opencv2/opencv.hpp>
#include <opencv2/highgui/highgui_c.h>
#include<iostream>
using namespace cv;
int main(int argc, char** argv)
{
Mat dst;
Mat src = imread("F://1.png", IMREAD_COLOR);
if (src.empty()) {
printf("error");
return -1;
}
namedWindow("test opencv setup", CV_WINDOW_AUTOSIZE);
imshow("test opencv setup", src);
double t = getTickCount();
namedWindow("out put window", CV_WINDOW_AUTOSIZE);
Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);//定义掩膜
filter2D(src, dst, src.depth(), kernel);
double timeconsume = (getTickCount() - t) / getTickFrequency();
printf("time consume %.2f", timeconsume);
imshow("out put window", dst);
waitKey(0);
return 0;
}
输出掩膜操作后图像(左)以及原图(右),对比度提高,更加清晰生动
打印时间消耗