hur.cn - 华软网

 热门搜索

关于VFW开发视频捕捉的程序,请问怎样在视频窗口内画出一个矩形框?

  作者:未知    来源:网络    更新时间:2010/12/26
VFW建立在一个对话框程序中

想实现动态追踪某个物体,把这个物体标识出来。
非常谢谢!
---华软 网友回答---
继续求助,非常谢谢!
---华软网友回复---
曾经我也提问过这个问题,,不过我用的DirectShow。
直接 在窗口上面画肯定 是不行的,要新建一个透明窗口,盖在捕捉画面窗口上方,然后在透明窗口上画矩形。,
---华软网友回复---
不知道你是怎么把 视频流输出到屏幕上的,我以前做的是按帧取bitmap,动态效果是多张图片的效果,每张图上就能够画了。
---华软网友回复---
修改DirectShow的render,在图上面直接画.
---华软网友回复---
引用 2 楼 zz275256167 的回复:
曾经我也提问过这个问题,,不过我用的DirectShow。
直接 在窗口上面画肯定 是不行的,要新建一个透明窗口,盖在捕捉画面窗口上方,然后在透明窗口上画矩形。,



请问怎样新建一个透明窗口的?
麻烦详细指教一下
多谢多谢
---华软网友回复---
引用 4 楼 eyey1 的回复:
修改DirectShow的render,在图上面直接画.


那么针对VFW呢?
应该怎样措置惩罚?
非常谢谢!
---华软网友回复---
题目的问题很简单,看你是怎么显示到窗口的,做法不同

内容的问题,这个很难,看能找到论文不
---华软网友回复---
引用 6 楼 laohubinbin 的回复:
引用 4 楼 eyey1 的回复:
修改DirectShow的render,在图上面直接画.


那么针对VFW呢?
应该怎样措置惩罚?
非常谢谢!


太多了,是否是vfw不清楚,随便找了一个.
http://www.codeproject.com/KB/audio-video/object_tracker.aspx
---华软网友回复---
引用 8 楼 eyey1 的回复:
引用 6 楼 laohubinbin 的回复:
引用 4 楼 eyey1 的回复:
修改DirectShow的render,在图上面直接画.


那么针对VFW呢?
应该怎样措置惩罚?
非常谢谢!


太多了,是否是vfw不清楚,随便找了一个.
http://www.codeproject.com/KB/audio-video/object_tracker.aspx


是的
就是想画一个这样的红色框
现在不涉及到图像内容的问题
就是想知道怎么画
---华软网友回复---
引用 7 楼 delphigis 的回复:
题目的问题很简单,看你是怎么显示到窗口的,做法不同

内容的问题,这个很难,看能找到论文不


现在不涉及到图像内容的问题
不需要确定位置
就是想知道怎么画出一个框

是鉴于对话框的程序,主要代码以下:

#include "vfw.h"

CAPSTATUS SsCapStatus;
CAPTUREPARMS SsCapParms;
CAPDRIVERCAPS gCapDrvCaps;
HWND cameraWin;

BOOL Ccamera::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
CRect rect1;
GetWindowRect(&rect1);

cameraWin=capCreateCaptureWindow("camera", WS_CHILD|WS_VISIBLE, 3,3, 
rect1.Width(), rect1.Height(), GetSafeHwnd(), 1);
capDriverConnect(cameraWin,0);
capDriverGetCaps(cameraWin,&gCapDrvCaps, sizeof(CAPDRIVERCAPS));
capPreviewRate(cameraWin, 1);

capPreview(cameraWin, TRUE);

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}


---华软网友回复---
你。。你是刘老师吗。。。。。
---华软网友回复---
参照结果:
http://www.codeguru.com/forum/archive/index.php/t-382154.html
---华软网友回复---
引用 11 楼 wqs7841482 的回复:
你。。你是刘老师吗。。。。。


呵呵
是的
我也在研讨这个问题
大家一起来
---华软网友回复---
这是目前我做得,虽然能画了,然则效果不太好,闪得厉害,是否是没用双缓存的缘故?然则试了几次双缓存都不行,请大家帮助看看,多谢。

#include "vfw.h"

CAPSTATUS SsCapStatus;
CAPTUREPARMS SsCapParms;
CAPDRIVERCAPS gCapDrvCaps;
HWND cameraWin;
int i=0; //全局变量,计数器用

//回调函数
LRESULT CALLBACK FrameCallbackProc(HWND hWnd, LPVIDEOHDR lpVHdr) 

if (!hWnd) return FALSE; 

/////////////////////////////////////////////////////////////// 
HDC hDC = GetDC(hWnd); 
HDC hMemDC = CreateCompatibleDC(hDC); 
HBITMAP m_hBitmap = CreateCompatibleBitmap(hDC, 800, 600); 

RECT rect; 
GetClientRect(hWnd, &rect); 

HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, m_hBitmap); 

HDRAWDIB hDib = DrawDibOpen(); 

BITMAPINFO m_bmpInfo/*=NULL*/;
capGetVideoFormat(hWnd,&m_bmpInfo,lpVHdr->dwBytesUsed);
// 参数m_bmpInfo是通过视频收集函数capGetVideoFormat获得的位图格式. 
DrawDibDraw(hDib, hMemDC, 
0, 0, rect.right, rect.bottom, 
&(m_bmpInfo.bmiHeader), (LPVOID)lpVHdr->lpData, 
0, 0, m_bmpInfo.bmiHeader.biWidth , m_bmpInfo.bmiHeader.biHeight, 
DDF_NOTKEYFRAME); 

CPen pen(PS_SOLID,10,RGB(255,0,0)); /*创建一个红色的实线CPen对象,宽度为2*/
SelectObject(hDC,&pen);             /*将画笔对象增加到dc的属性列内外*/
        //但此处画笔运用并未成功,不知为什么???

MoveToEx(hDC,10+i,10+i,NULL);
LineTo(hDC,110+i,10+i);
LineTo(hDC,110+i,110+i);
LineTo(hDC,10+i,110+i);
LineTo(hDC,10+i,10+i);

i=i+5;

if (i>350)
{
i=0;
}

return (LRESULT) TRUE ; 



BOOL Ccamera::OnInitDialog() 
{
CDialog::OnInitDialog();

// TODO: Add extra initialization here
CRect rect1;
GetWindowRect(&rect1);

cameraWin=capCreateCaptureWindow("camera", WS_CHILD|WS_VISIBLE, 3,3, 
rect1.Width(), rect1.Height(), /*GetSafeHwnd()*/m_hWnd, 1);
capDriverConnect(cameraWin,0);
capDriverGetCaps(cameraWin,&gCapDrvCaps, sizeof(CAPDRIVERCAPS));
capPreviewRate(cameraWin, 1);

SetTimer(1,500,NULL);//利用定时器来刷屏,闪得厉害

return TRUE;  // return TRUE unless you set the focus to a control
              // EXCEPTION: OCX Property Pages should return FALSE
}

void Ccamera::OnTimer(UINT nIDEvent) 
{
// TODO: Add your message handler code here and/or call default
capSetCallbackOnFrame(cameraWin, FrameCallbackProc); 

Invalidate(TRUE);
CDialog::OnTimer(nIDEvent);
}
---华软网友回复---
终于找到了~
---华软网友回复---
强烈推荐:记得明日科技出过一本书,里面就有楼主想要的111
---华软网友回复---
引用 16 楼 yiruirui0507 的回复:
强烈推荐:记得明日科技出过一本书,里面就有楼主想要的111


麻烦示知一下书名吧
多谢      
华软声明:本内容来自网络,如有侵犯您版权请来信指出,本站立即删除。