關於我自己

我的相片
累計超過15年的工作經驗,包括10年的設備製造業經驗,超過6年的光電零組件製造業經驗;10年的海外工作經驗,其中至今有5年以上的派駐經驗。 1.專注AOI檢測於10年以上(從光機設計、圖像分析、設備挑選、處理速度) 2.機器學習推論-onnx整合傳統演算法從瑕疵抓取、分析、分類 3.遷移式機器學習模式(工業應用、醫療應用) 4.整合:Python推論引擎、C++運算能力、C#友善介面 彈性使用 5.擅長利用專家模型推進專案,並熟悉使用OpenVINO、TensorRT、ONNXRUNTIME框架進行有效的實作與測試。

2011年10月7日 星期五

[轉貼]圖像處理-Hough線變換和圓變換

http://blog.csdn.net/hustspy1990/article/details/6226374

1. Hough線變換

  1. //Hough線變換  
  2. #include "cv.h"  
  3. #include "highgui.h"  
  4. int main()   
  5. {  
  6.     // TODO: Add your command handler code here  
  7.     IplImage* pImage= NULL;// 聲明IplImage 變量  
  8.     IplImage* pImg8u= NULL;// 聲明IplImage 變量,用於圖像格式轉換  
  9.     IplImage* pImgCanny= NULL;// 聲明IplImage 變量,用於灰度圖像Canny變換  
  10.     CvMemStorage* storage = NULL;// 聲明storage 變量,用於存儲檢測到的線段  
  11.     CvSeq* lines = NULL;   //聲明lines變量,用於存儲直線的輪廓  
  12.       
  13.     //讀入圖像  
  14.     pImage=cvLoadImage("Airplane.jpg", -1);  
  15.     //建立和原始圖像一樣圖像內存區,圖像元素的位深度設為IPL_DEPTH_8U   
  16.     //即無符號8位整型  
  17.     pImg8u = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U, 1);  
  18.     pImgCanny = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U, 1);  
  19.     //將彩色圖像轉換為灰度圖像  
  20.     cvCvtColor(pImage, pImg8u, CV_BGR2GRAY);  
  21.     //創建內存空間  
  22.     storage = cvCreateMemStorage(0);  
  23.    
  24.     //利用Canny變換找出圖像邊緣  
  25.     cvCanny( pImg8u, pImgCanny, 50, 500, 3 );  
  26.     //Hough線變換  
  27.     lines = cvHoughLines2( pImgCanny, storage, CV_HOUGH_PROBABILISTIC, 1, CV_PI/180, 80, 30, 10 );  
  28.       
  29.     //在原圖上畫紅直線  
  30.     int i;  
  31.     for( i = 0; i < lines->total; i++ )  
  32.     {  
  33.         CvPoint* line = (CvPoint*)cvGetSeqElem(lines,i);  
  34.         cvLine( pImage, line[0], line[1], CV_RGB(255,0,0), 3, 8 );  
  35.     }  
  36.     //創建窗口,顯示圖像  
  37.     cvNamedWindow( "Hough Line Transform", 1 );  
  38.     cvShowImage( "Hough Line Transform", pImage);  
  39.     //等待按鍵  
  40.     cvWaitKey(0);   
  41.     //銷毀窗口  
  42.     cvDestroyWindow( " Hough Line Transform " );      
  43.     //將程序開始定義的變量釋放  
  44.     cvReleaseImage( & pImage);    
  45.     cvReleaseImage( & pImgCanny);  
  46.     cvReleaseImage( & pImg8u);    
  47.      
  48.       
  49. }  
測試

原圖


直線偵測



2. Hough圓變換

  1. //Hough圓變換  
  2. #include "cv.h"  
  3. #include "highgui.h"  
  4. int main()  
  5. {  
  6.     // TODO: Add your command handler code here  
  7.     IplImage* pImage= NULL;// 聲明IplImage 變量  
  8.     IplImage* pImg8u= NULL;// 聲明IplImage 變量,用於圖像格式轉換  
  9.     CvMemStorage* storage = NULL;// 聲明storage 變量,用於存儲檢測到的線段  
  10.     CvSeq* circles = NULL;  
  11.       
  12.     //讀入圖像  
  13.     pImage=cvLoadImage("Airplane.jpg", -1);  
  14.     //建立和原始圖像一樣圖像內存區,圖像元素的位深度設為IPL_DEPTH_8U   
  15.     //即無符號8位整型  
  16.     pImg8u = cvCreateImage(cvGetSize(pImage),IPL_DEPTH_8U, 1);  
  17.     //轉換成灰度圖像  
  18.     if(pImage->nChannels != 1)  
  19.          cvCvtColor( pImage, pImg8u, CV_BGR2GRAY );  
  20.     else  
  21.          cvCopy(pImage, pImg8u);  
  22.     //平滑化  
  23.     cvSmooth( pImg8u, pImg8u, CV_GAUSSIAN, 7, 7 );  
  24.     //創建內存空間  
  25.     storage = cvCreateMemStorage(0);  
  26.     //Hough圓變換  
  27.     circles = cvHoughCircles( pImg8u, storage, CV_HOUGH_GRADIENT, 1, pImg8u->height/4, 250, 55 );  
  28.     // 畫出識別出的圓  
  29.     int i;  
  30.     for( i = 0; i < circles->total; i++ )  
  31.     {  
  32.           float* p = (float*)cvGetSeqElem( circles, i );  
  33.           cvCircle(pImage, cvPoint(cvRound(p[0]),cvRound(p[1])), cvRound(p[2]), CV_RGB(255,0,0), 3, 8, 0 );  
  34.     }  
  35.     //創建窗口,顯示圖像  
  36.     cvNamedWindow( "Hough Circle Transform", 1 );  
  37.     cvShowImage( "Hough Circle Transform", pImage);  
  38.     //等待按鍵  
  39.     cvWaitKey(0);   
  40.     //銷毀窗口  
  41.     cvDestroyWindow( " Hough Circle Transform " );    
  42.     //將程序開始定義的變量釋放  
  43.     cvReleaseImage( & pImage);    
  44.     cvReleaseImage( & pImg8u);    
  45.       
  46.       
  47. }  
測試

原圖


圓偵測

沒有留言: