0
我正在嘗試編寫圖像處理程序,但我遇到了一些問題。C++圖像處理,計算對象的角度
我設法計數形狀的場,電路(邊緣檢測)和其他一些變量,我需要。 現在我需要找出每個箭頭的角度。我正在考慮尋找一個箭頭的中心,然後將它與圖像質量中心進行比較(並且它們之間的線會是角度,我不確定它是如何完成的)。
問題是我不知道如何實現它。我可以通過設置顏色來檢測箭頭,但那隻會讓我感覺到它們的邊緣。我不知道如何找到大衆中心(在互聯網上搜索有關它的信息實際上讓我更困惑),每個箭頭的中心或如何計算角度。
你能幫我計算這些角度嗎?我不知道如何去做。
我正在使用DIBLOOK示例。我無法使用任何非標準庫。
我對這個事情目前的功能是:
void CDibDoc::ConvertToGrayImage(CView *view)
{
trace("start ConvertToGrayImage\r\n");
RGBTRIPLE* rows[500] ;
int width, height ;
int obwod=0;
int pole=0;
float w3=0.0;
float m00, m01, m02, m20, m10, m11;
float M01, M20, M11, M7, M02;
if(GetDIBRowsRGB(m_hDIB,rows,&width,&height)) {
for(int x=0;x<width;x++)
for(int y =0;y<height;y++) {
if(x<width-1 && x>0 && y<height-1 && y>0){ //count circuit, edge detection
if(rows[x][y].rgbtBlue != rows[x+1][y].rgbtBlue || rows[x][y].rgbtBlue != rows[x][y+1].rgbtBlue){
obwod++;
}
}
if(rows[x][y].rgbtBlue == 0){ //count field
pole++;
m00+= 1;
m01+= y;
m02+= y*y;
m20+= x * x;
m10+= x;
m11=+x * y;
} //counting variables for other things
M02 = m02 - (m01*m01)/m00;
M01 = m01 - (m01/m00) * m00;
M11 = m11-m10 * m01/m00;
M20 = m20 - m10*m10/m00;
M7 = (M20*M02 - M11*M11)/(m00*m00*m00*m00);
}
FreeDIBRows(m_hDIB);
w3 = (obwod/(2* sqrt((float)M_PI * pole))) -1; //more counting
}
UpdateAllViews(NULL);
圖片帶箭頭:
Hough變換 –