openCV例項 Canny邊緣檢測

2021-09-07 03:01:01 字數 1994 閱讀 6182

在第一次使用opencv程式成功對影象進行開啟後,現在開始試驗第二個例程試驗:canny邊緣檢測

這裡演算法原理和具體程式設計語句都先不管,因為作為一名新手(反正我是這麼感覺的),拿些現成的程式跑出效果才是讓人很有feel的。

先貼下原**:

#include "cv.hpp"

#include "cxcore.hpp"

#include "opencv2\highgui\highgui.hpp"

using namespace cv;

using namespace std;

int edgethresh = 1;

// 宣告 原始,灰度,和 canny邊緣

mat image, cedge;

mat gray, edge;

void ontrackbar(int, void*)

int main(int argc, char** argv)

// 生成灰度,因為只有灰度才能生成邊緣

cedge.create(image.size(), image.type());

cvtcolor(image,gray, cv_bgr2gray);

//新建乙個視窗

namedwindow("edge map", 1);

// 生成乙個進度條來控制邊緣檢測

createtrackbar("canny threshold", "edge map", &edgethresh, 100, ontrackbar);

//初始化影象

ontrackbar(0,0);

waitkey(0);

return 0;

}}這個是opencv中文論壇上的源**c++版本,木有一點改動。但是出現以下錯誤:

錯誤1.

1>d:\program files\microsoft visual studio 10.0\my project\opencv\test\test2\test2.cpp(72): fatal error c1010: 在查詢預編譯頭時遇到意外的檔案結尾。是否忘記了向源中新增「#include "stdafx.h"」?

1>

1>生成失敗。

這個錯誤很好解決的了,因為使用預編譯,卻沒有找到標準標頭檔案:stdafx.h,雖然我們真的不需要用它,但是為了方便加上該語句就好了。

錯誤2.

參見

錯誤3.

哈哈,**結尾多了個},刪掉就好啦。

錯誤4.

編譯都順利通過了,現在一debugging就發現

很簡單,例程估計用cmd來執行main(),引數在命令列中都敲進去了。直接執行debug電腦發現缺少必要引數肯定不幹。仔細看下 int argc, char** argv ,第乙個引數發現沒用著,可以直接刪掉。後面是個指向char指標的指標,程式中是用來開啟檔案用的,這好辦,自己給他在程式中指乙個唄:

// 載入

image = imread(imagename, 1);

// 判斷載入是否成功

if(image.empty())

printf後面的argv[1],沒什麼實際作用,刪除。這下程式就跑通了唄,實際效果如下:

其實這些錯誤只要我們認真讀懂錯誤提示,兵來將擋,水來土掩,再加上網路的資源就能夠很容易解決

期待明天有新進展!!

opencv的Canny邊緣檢測

前言 目標 去噪 邊緣對雜訊敏感,第一步先用高斯濾波器來濾波。尋找影象的密度梯度 對平滑後的影象進行濾波用sobel濾波器來求出x,y方向的導數。梯度方向總是垂直於邊緣 非極大值抑制 在得到梯度的值和方向後,對影象進行全面掃瞄,取出不需要的畫素,這些畫素可能不構成邊緣。對於這一點如果畫素是其梯度方向...

OpenCV中Canny邊緣檢測

具體的canny邊緣檢測原理 1 消除雜訊,使用高斯平滑濾波器卷積降噪 2 計算梯度幅值和方向。利用sobel濾波器。得到x和y方向的導數gx和gy 計算梯度的幅值和方向 g sqrt gx 2 gy 2 a arctan gx gy 梯度的方向近似到四個可能角度之一 一般0,45,90,135 3...

OpenCV的Canny邊緣檢測

步驟 平滑處理 梯度檢測 非極大值抑制 滯後閾值處理 1.所有的邊緣都極易受到雜訊的干擾,為了防止因雜訊引起的錯誤檢測結果,有必要用平滑濾波的方法濾除雜訊。高斯濾波是常用的濾波方式,二維影象用二維高斯函式,它的定義為 ps 表示高斯函式的標準差 邊緣檢測之前,先用gaussianblur函式進行高斯...