2009年5月17日 星期日

HW2- IplImage之應用與cvCvtColor(),cvThreshold(),cvCanny()之使用

執行 下列程式
請問 這程式的目的為何 ??? 有哪些 你看不懂的


-------------------------------------------
#include "cv.h"
#include "cxcore.h"
#include "highgui.h"

int main( int argc, char** argv )
{
//聲明IplImage指針
IplImage* pImg = NULL;
IplImage* pImg2 = NULL;
IplImage* gray = NULL;
IplImage* bw = NULL;
IplImage* pCannyImg = NULL;



//載入圖像,強制轉化為Gray

pImg=cvLoadImage("fruits.jpg");


//為圖像申請空間

pImg2 = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 3);

gray = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);

bw = cvCreateImage(cvSize(pImg->width,pImg->height), IPL_DEPTH_8U, 1);

pCannyImg = cvCreateImage(cvGetSize(pImg),
IPL_DEPTH_8U,
1);

//cvCvtColor彩色轉灰階
cvCvtColor(pImg, gray, CV_BGR2GRAY);

//cvThreshold灰階轉黑白
cvThreshold( gray, bw, 63, 255, CV_THRESH_BINARY );

cvThreshold( pImg, pImg2, 127, 255, CV_THRESH_BINARY );


//canny邊緣檢測
cvCanny(gray, pCannyImg, 50, 150, 3);

//創建視窗
cvNamedWindow("src", 1);
cvNamedWindow("src2",1);
cvNamedWindow("blackwhite", 1);
cvNamedWindow("gray",1);
cvNamedWindow("canny",1);


//顯示圖像
cvShowImage( "src", pImg );
cvShowImage( "src2", pImg2 );
cvShowImage( "gray", gray );
cvShowImage( "blackwhite", bw );
cvShowImage( "canny", pCannyImg );

cvWaitKey(0); //等待按鍵

//銷毀視窗
cvDestroyWindow( "src" );
cvDestroyWindow( "src2" );
cvDestroyWindow( "canny" );
cvDestroyWindow( "blackwhite" );
cvDestroyWindow( "gray" );

//釋放圖像
cvReleaseImage( &pImg );
cvReleaseImage( &pImg2 );
cvReleaseImage( &gray);
cvReleaseImage( &bw );
cvReleaseImage( &pCannyImg );

}

2 則留言:

  1. 老師解說後 就比較懂了
    只是對於CV_THRESH_BINARY 還是不知那到底是啥= =

    回覆刪除
  2. CV_THRESH_BINARY 是用來設定是要以怎樣的方式來呈現經過Threshold後的處理

    CV_THRESH_BINARY:
    dst(x,y) = max_value, if src(x,y)>threshold
    0, otherwise

    CV_THRESH_BINARY_INV:
    dst(x,y) = 0, if src(x,y)>threshold
    max_value, otherwise

    CV_THRESH_TRUNC:
    dst(x,y) = threshold, if src(x,y)>threshold
    src(x,y), otherwise

    CV_THRESH_TOZERO:
    dst(x,y) = src(x,y), if src(x,y)>threshold
    0, otherwise

    CV_THRESH_TOZERO_INV:
    dst(x,y) = 0, if src(x,y)>threshold
    src(x,y), otherwise

    回覆刪除