VC+DirectShow对视频进行图片处理之四
2007-03-15 21:48:55 来源:WEB开发网核心提示: 下面要讨论具体做法,先解决图像坐标问题,VC+DirectShow对视频进行图片处理之四(5),我获取第一点白点的程序如下:void CDSControl::GetMousePos(BYTE* pb,int *xPos,int* yPos){int x,y;BOOL mouseFound
下面要讨论具体做法。先解决图像坐标问题。我获取第一点白点的程序如下:
void CDSControl::GetMousePos(BYTE* pb,int *xPos,int* yPos)
{
int x,y;
BOOL mouseFound = FALSE;
for(y = 0; y < m_bmpHei; y ++){
for(x = 0; x < m_bmpWid; x ++){
if(pb[0] == 255){
// 因为白色为(255,255,255),判断一个255 即可
pb[2] = 255; // 设为红色,别忘了 BGRA 的内存排列方式
pb[1] = pb[0] = 0; //
// 计算坐标
*xPos = ScreenWid - x * ScreenWid / m_bmpWid;
*yPos = y * ScreenHei / m_bmpHei;
mouseFound = TRUE;
break;
}
pb += 4;
}
if(mouseFound){
break;
}
}
}
可以看出我是从所得的图像缓冲区的第一点开始检索的,这也是摄像头扫描 CCD 的顺序,看上面右边的图,那是右手的图像,可以推想出摄像头的扫描顺序如下图所示:
(摄像头扫描坐标) (与屏幕坐标(蓝)相对的摄像头坐标(红))
而相对于屏幕坐标很容易得到上面右图,说明屏幕坐标以左上角为原点,x的正方向为右,而摄像头坐标以右上角为原点,x的正方向为左,也就是说我按顺序寻找所得到的坐标值是这样的:y 与屏幕坐标 y 相符,x 则与屏幕坐标 x 刚好相反。因此推算出鼠标位置应该是:
Tags:VC DirectShow 视频
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接