您的位置:首页 > 运维架构

opencv3中scharr滤波器

2015-10-11 00:00 435 查看
#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;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: