OpenCV 自帶庫影象邊緣計算
阿新 • • 發佈:2018-12-31
#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