OpenCV學習代碼記錄——canny邊緣檢測
阿新 • • 發佈:2018-04-05
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邊緣檢測