opencv学习笔记二:图像滤波操作

图像掩模操作就是滤波器滤波,用一个指定大小的模板在原图像滑动窗口,例如这里用一个【0 -1 0;-1 5 -1;0 -1 0】的模板,进行图像对比度的提高。

#include
using namespace cv;

int main(int argc,char** argv)
{
	Mat src = imread("1.jpg");
		if (src.empty())
		{
			printf("未能正确加载图像");
			return -1;
		}
	namedWindow("src");
	imshow("src",src);

	int rows = src.rows;
	int offsetx = src.channels();
	int cols = src.cols * src.channels();
	//定义一个与原图像同样大小同样类型的图像矩阵
	Mat out = Mat::zeros(src.size(), src.type());
    //最外围一层像素无法进行掩模操作
	for (int i = 1; i < rows - 1; i++) 
	{
		uchar* preview = src.ptr(i-1);
		uchar* current = src.ptr(i);
		uchar* next = src.ptr(i+1);
		uchar* p = out.ptr(i);

		for (int j = offsetx; j < cols-offsetx; j++)
		{
			//saturate_cast使值在0到255之间
			p[j] =saturate_cast (5 * current[j]-current[j-offsetx]-current[j+offsetx]-preview[j]-next[j]);
		}
	}
    //上面是通过指针访问像素进行操作,下面是直接调用opencv的API进行操作,功能是一样的
	/*Mat out = Mat::zeros(src.size(), src.type());;
	Mat kernel = (Mat_(3,3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);
	filter2D(src, out, -1, kernel);*/
	namedWindow("out");
	imshow("out", out);

	waitKey(0);
	return 0;
}

运行结果如下:

opencv学习笔记二:图像滤波操作_第1张图片

你可能感兴趣的:(opencv)