天天看點

OpenCV——Canny邊緣檢測一、Canny算法二、C++代碼三、python代碼四、結果展示五、參考連結

目錄

  • 一、Canny算法
  • 二、C++代碼
  • 三、python代碼
  • 四、結果展示
    • 1、原始圖像
    • 2、灰階圖像
    • 3、圖像邊緣
  • 五、參考連結

一、Canny算法

   Canny邊緣檢測算法是目前最優越的邊緣檢測算法之一,該算法的檢測過程分5個步驟:

  1. 使用高斯濾波平滑圖像,減少噪聲。
  2. 計算圖像中每個像素的梯度方向和幅值。
  3. 應用非極大值抑制算法消除邊緣檢測帶來的雜散相應。
  4. 應用雙門檻值法區分強邊緣和弱邊緣。
  5. 消除孤立的邊緣。

二、C++代碼

#include <opencv2\opencv.hpp>
#include <iostream>

using namespace cv;
using namespace std;

int main()
{
	//----------------讀取圖像-----------------
	Mat img = imread("1.jpg");
    //黑白圖像邊緣檢測結果較為明顯
	Mat gray_img;
	cvtColor(img, gray_img, COLOR_BGR2GRAY);
	Mat resultHigh;
	//--------------Canny邊緣檢測--------------
	// 圖像品質較好,無噪聲。是以,無需高斯濾波。
	Canny(gray_img, resultHigh, 100, 200, 3);
	//----------------顯示圖像-----------------
	imshow("origin_pic", img);
	imshow("gray", gray_img);
	imshow("resultHigh", resultHigh);
	waitKey(0);
	return 0;
}

           

三、python代碼

import cv2

img = cv2.imread("1.jpg")
gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# -------------------canny()邊緣檢測------------------------
# 圖像品質較好,無噪聲。是以,無需高斯濾波。
canny = cv2.Canny(gray_img, 100, 200, 3)
# ----------------------顯示結果----------------------------
cv2.imshow("original_img", img)
cv2.imshow("gray_img", gray_img)
cv2.imshow('Canny', canny)
cv2.waitKey(0)

           

四、結果展示

1、原始圖像

OpenCV——Canny邊緣檢測一、Canny算法二、C++代碼三、python代碼四、結果展示五、參考連結

2、灰階圖像

OpenCV——Canny邊緣檢測一、Canny算法二、C++代碼三、python代碼四、結果展示五、參考連結

3、圖像邊緣

OpenCV——Canny邊緣檢測一、Canny算法二、C++代碼三、python代碼四、結果展示五、參考連結

五、參考連結

[1] OpenCV—python 邊緣檢測(Canny)

[2] OpenCV彩色圖與灰階圖互相轉換

[3] OpenCV–圖像轉化為灰階圖、HSV圖

[4] Canny邊緣檢測算法原理及其VC實作詳解(一)