1. 程式人生 > >OpenCV學習代碼記錄——canny邊緣檢測

OpenCV學習代碼記錄——canny邊緣檢測

scalar pos down 輸入 canny emp 函數 color 什麽

很久之前學習過一段時間的OpenCV,當時沒有做什麽筆記,但是代碼都還在,這裏把它貼出來做個記錄。
代碼放在碼雲上,地址在這裏https://gitee.com/solym/OpenCVTest/tree/master/OpenCVTest。

#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/imgproc/imgproc.hpp>  // cvtColor

// http ://blog.csdn.net/hitwengqi/article/details/6877864
static cv::Mat image, edge; // 原始圖片,canny邊緣保存圖片 static cv::Mat gray, gedge; // 灰度圖片,canny便於保存圖片 int edgeThresh = 1; // 控制進度條(傳出進度條控制的值) void onTrackBar(int, void*); int CannyEdgeDetection() { // 加載原始圖片 image = cv::imread("../Image/sisy.jpg"); // 判斷載入是否成功 if (image.empty()) { printf("載入圖片失敗
\n"); return -1; } // 生成灰度圖片,因為只有灰度圖片才能生成邊緣圖片 // gray.create(image.size(), image.type()); // 這裏create是沒有用的 cv::cvtColor(image, gray, CV_BGR2GRAY); // 這裏會自動去create到轉換的目標保存類型,這裏應該是UINT8 cv::imshow("gray", gray); // 新建一個窗口 cv::namedWindow("Edge Map", 1); // 生成一個進度條來控制邊緣檢測
cv::createTrackbar("Canny Threshold", "Edge Map", &edgeThresh/*傳出進度條的值*/,100/*進度條長度*/, onTrackBar /*進度條值改變時調用的函數*/); // 初始化圖像 onTrackBar(0, NULL); // 等待按鍵 cv::waitKey(); return 0; } void onTrackBar(int, void*) { // blur 灰度圖片(blur 模糊) cv::blur(gray, gedge, cv::Size(3, 3)); // Canny 邊緣檢測 cv::Canny(gray /*單通道輸入圖像.*/, gedge/*單通道存儲邊緣的輸出圖像*/, edgeThresh/*第一個閾值*/, edgeThresh * 3 /*第二個閾值*/, 3 /*Sobel算子內核大小*/); // 全部設置為0 edge = cv::Scalar::all(0); // 拷貝邊緣像素點 image.copyTo(edge, gedge); // 顯示圖片 cv::imshow("Edge Map", edge); }

OpenCV學習代碼記錄——canny邊緣檢測