openCV實例:Canny邊緣檢測


http://blog.sina.com.cn/s/blog_737adf530100z0jk.html

在第一次使用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*)
{
//blur 灰度圖片
blur(gray, edge, Size(3,3));
 
// Canny 邊緣檢測
Canny(gray,edge, edgeThresh, edgeThresh*3, 3);
 
//全部設為0
cedge = Scalar::all(0);
 
//拷貝邊緣的象素點
image.copyTo(cedge, edge);
 
imshow("Edge map", edge);
 
}
 
int main(int argc, char** argv)
{
 
 
// 載入圖片
image = imread(argv[1], 1);
 
// 判斷載入圖片是否成功
if(image.empty())
{
printf("miss the image file: %d \n", argv[1]);
return -1;
}
 
// 生成灰度圖片,因為只有灰度圖片才能生成邊緣圖片
         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.

openCV實例:Canny邊緣檢測

參見http://www.opencv.org.cn/forum/viewtopic.php?f=1&t=15046&p=59244&hilit=tbb_debug.dll#p59244,按照論壇中所給的網址,下載一個tbb包,將tbb_debug.dll解壓到D:\Program Files\opencv\build\common\tbb\ia32\vc10(這是我的安裝目錄)即可。

 

錯誤3.

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

 

錯誤4.

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

openCV實例:Canny邊緣檢測

    很簡單,例程估計用cmd來運行main(),參數在命令行中都敲進去了。直接運行debug電腦發現缺少必要參數肯定不干。仔細看下 int argc, char** argv ,第一個參數發現沒用着,可以直接刪掉。后面是個指向char指針的指針,程序中是用來打開文件用的,這好辦,自己給他在程序中指一個唄:

const char* imagename = "lena.jpg";
 
 // 載入圖片
 image = imread(imagename, 1);
 
 // 判斷載入圖片是否成功
 if(image.empty())
 {
  printf("miss the image file: %d \n");
  return -1;
 }

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

openCV實例:Canny邊緣檢測

openCV實例:Canny邊緣檢測 

OK!!!!

 

    其實這些錯誤只要我們認真讀懂錯誤提示,兵來將擋,水來土掩,再加上網絡的資源就能夠很容易解決openCV實例:Canny邊緣檢測

    期待明天有新進展!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM