在對影像進行邊緣檢測后,如何建立坐標獲得引數資訊得到圓心和半徑?想了好久和程式都不能結合在一起,求大神指點!
已下是我的羅伯特算子得到的邊緣檢測,就是不知道如何獲得坐標資訊。
void MyDib::Robert()
{
LPBYTE p_data; //原圖資料區指標
int wide,height,DibWidth; //原圖長、寬
p_data=https://bbs.csdn.net/topics/this->GetData (); //取得原圖的資料區指標
wide=this->GetWidth (); //取得原圖的資料區寬度
height=this->GetHeight (); //取得原圖的資料區高度
DibWidth=this->GetDibWidthBytes(); //取得原圖的每行位元組數
int i,j; //回圈變數
if (m_pBitmapInfoHeader->biBitCount<9) //灰度影像
{
int pixel[4]; //Robert算子
LPBYTE temp=new BYTE[wide*height]; //新影像緩沖區
memset(temp,255,wide*height); //設定新影像初值為255
//由于使用2*2的模板,為防止越界,所以不處理最下邊和最右邊的兩列像素
for(j=0;j<height-1;j++)
for(i=0;i<wide-1;i++)
{
//生成Robert算子
pixel[0]=p_data[j*wide+i];
pixel[1]=p_data[j*wide+i+1];
pixel[2]=p_data[(j+1)*wide+i];
pixel[3]=p_data[(j+1)*wide+i+1];
//處理當前像素
temp[j*wide+i]=(int)sqrt((pixel[0]-pixel[3])*(pixel[0]-pixel[3])+(pixel[1]-pixel[2])*(pixel[1]-pixel[2]));
}
//將緩沖區中的資料復制到原圖資料區
memcpy(p_data, temp,wide*height);
//洗掉緩沖區
delete temp;
}
else //24位彩色
{
int pixel[4]; //Robert算子
BYTE *p_temp=new BYTE[height*DibWidth];
for(j=0;j<height-1;j++)
for(i=0;i<DibWidth-3;i++)
{
//生成Robert算子
pixel[0]=p_data[j*DibWidth+i];
pixel[1]=p_data[j*DibWidth+i+3];
pixel[2]=p_data[(j+1)*DibWidth+i];
pixel[3]=p_data[(j+1)*DibWidth+i+3];
//處理當前像素
p_temp[j*DibWidth+i]=(int)sqrt((pixel[0]-pixel[3])*(pixel[0]-pixel[3])+(pixel[1]-pixel[2])*(pixel[1]-pixel[2]));
}
memcpy(p_data,p_temp,height*DibWidth); // 復制處理后的影像
delete []p_temp; //洗掉暫時分配記憶體
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/122203.html
標籤:基礎類
