#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;
}
}
opencv3中scharr滤波器
最新推荐文章于 2024-01-22 08:47:33 发布
本文档展示了如何使用OpenCV3库在C++中应用Scharr滤波器进行图像处理。通过示例代码,分别对灰度图像和原始图像进行水平和垂直方向的滤波,同时演示了如何结合两个方向的滤波结果。程序包含了一个显示窗口,允许用户选择显示原始图像、X方向、Y方向或两者结合的结果。
摘要由CSDN通过智能技术生成