opencv3中scharr滤波器

本文档展示了如何使用OpenCV3库在C++中应用Scharr滤波器进行图像处理。通过示例代码,分别对灰度图像和原始图像进行水平和垂直方向的滤波,同时演示了如何结合两个方向的滤波结果。程序包含了一个显示窗口,允许用户选择显示原始图像、X方向、Y方向或两者结合的结果。
摘要由CSDN通过智能技术生成
#include<opencv2/opencv.hpp>
#include<iostream>
#include<vector>

using namespace std;
using namespace cv;

int g_nWay = 0, g_nDirection = 0, g_nValue = 0;

int main()
{
	Mat srcImage = imread("1.jpg");
	imshow("【原图】", srcImage);

	Mat grayImage;
	cvtColor(srcImage, grayImage, CV_BGR2GRAY);

	blur(srcImage, srcImage, Size(3, 3));
	blur(grayImage, grayImage, Size(3, 3));

	Mat dstImage, XImage, YImage, XYImage;
	Mat AbsXImage, AbsYImage, AbsXYImage;

	namedWindow("【显示窗口】", 0);
	createTrackbar("Gray/BGR", "【显示窗口】", &g_nWay, 1, 0);
	createTrackbar("X/Y/XY", "【显示窗口】", &g_nDirection, 2, 0);

	char key;
	vector<Mat> v;
	while (1)
	{
		if (!g_nWay)
		{
			Scharr(grayImage, XImage, CV_16S, 1, 0, 1, 0);
			//将得到的矩阵转换为8bit的矩阵
			convertScaleAbs(XImage, AbsXImage);
			Scharr(grayImage, YImage, CV_16S, 0, 1, 1, 0);
			convertScaleAbs(YImage, AbsYImage);

			/*v.push_back(AbsXImage);
			v.push_back(AbsYImage);
			merge(v, XYImage);*/
			addWeighted(AbsXImage, 0.5, AbsYImage, 0.5, 0, XYImage);

			if (g_nDirection == 0)
				dstImage = AbsXImage;
			if (g_nDirection == 1)
				dstImage = AbsYImage;
			if (g_nDirection == 2)
				dstImage = XYImage;
		}
		if (g_nWay)
		{
			Scharr(srcImage, XImage, CV_16S, 1, 0, 1, 0);
			//将得到的矩阵转换为8bit的矩阵
			convertScaleAbs(XImage, AbsXImage);
			Scharr(srcImage, YImage, CV_16S, 0, 1, 1, 0);
			convertScaleAbs(YImage, AbsYImage);
			addWeighted(AbsXImage, 0.5, AbsYImage, 0.5, 0, XYImage);

			if (g_nDirection == 0)
				dstImage = AbsXImage;
			if (g_nDirection == 1)
				dstImage = AbsYImage;
			if (g_nDirection == 2)
				dstImage = XYImage;
		}

		imshow("【显示窗口】", dstImage);

		key = waitKey(10);

		if (key == 27)
			break;
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值