當前位置:編程學習大全網 - 源碼下載 - 誰有vc++數字圖像處理的源代碼急需!!謝謝妳

誰有vc++數字圖像處理的源代碼急需!!謝謝妳

給妳壹個sobel找邊緣和漸變。有什麽需要可以聯系我。

#包含“cxcore.h”

#包含“highgui.h”

# include & ltcmath & gt

#pragma註釋(lib,“cv.lib”)

#pragma註釋(lib," highgui.lib ")

#pragma註釋(lib," cxcore.lib ")

#定義閾值150

IplImage * src//原圖

IplImage * tar//邊緣檢測後生成的新圖形

IplImage*灰色;//灰色貼圖

//sobel算子

int Func_Sobel(IplImage *src,IplImage* tar,int limit)

{

int sobelmask1[3][3],Sobel mask 2[3][3];

//水平模板

Sobel mask 1[0][0]=-1;//{-1,0,1,-2,0,2,-1,0,1};

Sobel mask 1[0][1]=-2;

Sobel mask 1[0][2]=-1;

Sobel mask 1[1][0]= 0;

Sobel mask 1[1][1]= 0;

Sobel mask 1[1][2]= 0;

Sobel mask 1[2][0]= 1;

Sobel mask 1[2][1]= 2;

Sobel mask 1[2][2]= 1;

//垂直模板

Sobel mask 2[0][0]=-1;//{-1,-2,-1,0,0,0,1,2,1};

Sobel mask 2[0][1]= 0;

Sobel mask 2[0][2]= 1;

Sobel mask 2[1][0]=-2;

Sobel mask 2[1][1]= 0;

Sobel mask 2[1][2]= 2;

Sobel mask 2[2][0]=-1;

Sobel mask 2[2][1]= 0;

Sobel mask 2[2][2]= 1;

int H = src-& gt;身高;

int W = src-& gt;寬度;

int i,j,h,w,temp1,temp2

for(h = 1;h & lth-1;h++)

{

for(w = 1;w & ltw-1;w++)

{

temp 1 = temp 2 = 0;

for(I = 0;我& lt3;i++)

{

for(j = 0;j & lt3;j++)

{

temp 1+=(src-& gt;imageData+(h-1+I)* src-& gt;width step)[(w-1+j)]* Sobel mask 1[I][j];

temp 2+=(src-& gt;imageData+(h-1+I)* src-& gt;width step)[(w-1+j)]* Sobel mask 2[I][j];

}

}

雙k = sqrt(temp 1 * temp 1+temp 2 * temp 2);

if(k & gt;極限)

{

(tar->;imageData+tar-& gt;width step * h)[w]=(uchar)255;//從固定值到變量的轉換需要強制轉換數據類型。

}

其他

(tar->;imageData+tar-& gt;width step * h)[w]=(uchar)0;

}

}

返回0;

}

//獲取灰度圖像

void Func _ GetGrayImage(IPL image * src,IplImage *tar)

{

int H = src-& gt;身高;

int W = src-& gt;寬度;

int w,h;

for(h = 0;h & lth;h++)

{

for(w = 0;w & ltw;w++)

{

(tar->;imageData+h * tar-& gt;width step)[w]=(unsigned char)((unsigned char)(src-& gt;imageData+h * src-& gt;widthStep)[3*w+2]*0.136+(無符號字符)(src-& gt;imageData+h * src-& gt;width step)[3 * w+1]* 0.514+(無符號字符)(src-& gt;imageData+h * src-& gt;width step)[3 * w]* 0.350);

}

}

}

void Func_ShowWindow()

{

CvNamedWindow("原始",0);//CV庫函數,窗口定義函數,窗口定義,用於下壹次顯示。

CvShowImage("原圖",src);//cv庫函數,標題欄是“原圖”,顯示的是src指向的圖像。

CvNamedWindow("灰度圖",0);

CvShowImage(" gray ");

CvNamedWindow("邊緣檢測圖",0);

CvShowImage(“邊緣檢測圖”,tar);

}

void Func_SaveWindow()

{

CvSaveImage("灰度。jpg”,灰色);

CvSaveImage("邊緣檢測圖。jpg”、tar);

}

void Func_CloseWindow()

{

cvReleaseImage(& amp;src);

cvReleaseImage(& amp;灰色);

cvReleaseImage(& amp;焦油);

CvDestroyWindow(" original ");

CvDestroyWindow("灰度貼圖");

CvDestroyWindow("邊緣檢測圖");

}

void main()

{

if ( (src=cvLoadImage("test.bmp "))

{

tar = cvCreateImage(cvSize(src-& gt;寬度,src-& gt;height),IPL_DEPTH_8U,1);

gray = cvCreateImage(cvSize(src-& gt;寬度,src-& gt;height),IPL_DEPTH_8U,1);

Func_GetGrayImage(src,gray);

Func_Sobel(灰度、焦油、閾值);//默認閾值是150。

func _ ShowWindow();

Func_SaveWindow()。

cvWaitKey(100000);

func _ close window();

}

返回;

}

  • 上一篇:Linuxboot源代碼分析
  • 下一篇:選擇題:由C++源程序文件編譯而成的目標文件的默認擴展名為( )。A)cpp B)exe C)obj D)lik
  • copyright 2024編程學習大全網