我正在尝试编写图像处理程序,但我遇到了一些问题。
我设法计算了形状的场、电路(边缘检测)和我需要的其他一些变量。现在我需要找出每个箭头的角度。我正在考虑寻找箭头的中心,然后将其与图像的质心进行比较(它们之间的线将是角度,我不确定它是否应该这样做)。
问题是我不知道如何实现它。我可以通过设置颜色检测箭头,但这只会让我得到它们的边缘。我不知道如何找到质心(在互联网上搜索有关它的信息实际上让我更加困惑),每个箭头的中心或如何计算角度。
你能帮我数一下这些角度吗?我已经不知道该怎么做了。
我正在使用 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);
带箭头的图片: