WEB开发网
开发学院软件开发VC VC+DirectShow对视频进行图片处理之四 阅读

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 刚好相反。因此推算出鼠标位置应该是:

上一页  1 2 3 4 5 6 7  下一页

Tags:VC DirectShow 视频

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接