1. 程式人生 > >OpenCV 自帶庫影象邊緣計算

OpenCV 自帶庫影象邊緣計算

#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