#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include "opencv2/imgproc/imgproc.hpp"
#include <iostream>
using namespace cv;
int main()
{
    cv::Mat srcImage = imread("..\\images\\building.jpg");
    if (!srcImage.data)
        return -1;
    cv::Mat srcGray;
    cvtColor(srcImage, srcGray, CV_RGB2GRAY);
    imshow("srcGray", srcGray);
    // 定义边缘图,水平及垂直
    cv::Mat edgeMat, edgeXMat, edgeYMat;
    // 求x方向Sobel边缘
    Sobel(srcGray, edgeXMat, CV_16S, 1, 0, 3, 1,
        0, BORDER_DEFAULT);
    // 求y方向Sobel边缘
    Sobel(srcGray, edgeYMat, CV_16S, 0, 1, 3, 1,
        0, BORDER_DEFAULT);
    // 线性变换转换输入数组元素成8位无符号整型
    convertScaleAbs(edgeXMat, edgeXMat);
    convertScaleAbs(edgeYMat, edgeYMat);
    // x与y方向边缘叠加
    addWeighted(edgeXMat, 0.5, edgeYMat, 0.5, 0, edgeMat);
    cv::imshow("edgeYMat", edgeYMat);
    imshow("edgeMat", edgeMat);
    // 定义Scharr边缘图像
    cv::Mat edgeMatS, edgeXMatS, edgeYMatS;
    // 计算x方向Scharr边缘
    Scharr(srcGray, edgeXMatS, CV_16S, 1, 0, 1,
        0, BORDER_DEFAULT);
    convertScaleAbs(edgeXMatS, edgeXMatS);
    // 计算y方向Scharr边缘
    Scharr(srcGray, edgeYMatS, CV_16S, 0, 1, 1,
        0, BORDER_DEFAULT);
    // 线性变换转换输入数组元素成8位无符号整型
    convertScaleAbs(edgeYMatS, edgeYMatS);
    // x与y方向边缘叠加
    addWeighted(edgeXMatS, 0.5, edgeYMatS, 0.5, 0, edgeMatS);
    cv::imshow("edgeMatS", edgeMatS);
    cv::waitKey(0);
    return 0;
}



转载:http://blog.csdn.net/zhuwei1988

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐