如何用Opencv求影象的灰度投影曲線
阿新 • • 發佈:2019-01-23
眼睛定位方法中利用灰度投影函式,假設I(x,y)表示點(x,y)處的畫素灰度值, 在區間[x1,x2]和[y1,y2] 內的垂直積分投影函式
int* v = NULL;//垂直投影
int* h = NULL;//水平投影
CvScalar s,t;//投影時矩陣的元素
IplImage* pBinaryImg = NULL;//二值化後圖像
IplImage* pVerticImg = NULL;//垂直投影影象
IplImage* pHorizImg = NULL;//水平投影影象
int x,y;//影象畫素座標
v=new int[pBinaryImg->width];
h=new int[pBinaryImg->height];
for(i=0;i<pBinaryImg->width;i++)
v[i]=0;
for(i=0;i<pBinaryImg->height;i++)
h[i]=0;
for( x=0;x<pBinaryImg->width;x++)
{
for(y=0;y<pBinaryImg->height;y++)
{
s=cvGet2D(pBinaryImg,y,x); //t=cvGet2D(paint,y,x);
if(s.val[0]==0)
v[x]++; //cvSet2D(paint,y,x,t);
}
}
for( y=0;y<pBinaryImg->height;y++)
{
for( x=0;x<pBinaryImg->width;x++)
{
s=cvGet2D(pBinaryImg,y,x); //t=cvGet2D(paint,y,x);
if(s.val[0]==0)
h[y]++;
}
}
pVerticImg = cvCreateImage( cvGetSize(pBinaryImg),8, 1 );
pHorizImg = cvCreateImage( cvGetSize(pBinaryImg),8, 1 );
cvZero(pVerticImg);
cvZero(pHorizImg);
for(x=0;x<pBinaryImg->width;x++)
{
for(y=0;y<v[x];y++)
{
t=cvGet2D(pVerticImg,y,x); //s=cvGet2D(paint,y,x); //t=cvGet2D(paint,y,x);
t.val[0]=255;
cvSet2D(pVerticImg,y,x,t);
}
}
for(y=0;y<pBinaryImg->height;y++)
{
for(x=0;x<h[y];x++)
{
t=cvGet2D(pHorizImg,y,x); //s=cvGet2D(paint,y,x); //t=cvGet2D(paint,y,x);
t.val[0]=255;
cvSet2D(pHorizImg,y,x,t);
}
}