全局函数变量 CCVideoTestDlgDlg *pDial;
注册回调函数capSetCallbackOnFrame(m_hWndVideo,myProcessing);
实现一边采集视频,一边灰度化视频每一帧,然后显示,下面是从一个网友那转的灰度化的回调,个人感觉加粗的那句有问题,应该是获得视频每一帧的图像宽和高的乘积,这个m_high和m_width怎么获得??????LRESULT CALLBACK myProcessing(HWND h, LPVIDEOHDR pV)
{
// ====== rgb2gray ========
int i,j,size;
BYTE *pIm;
size = m_high*m_width;
pIm = (BYTE*)malloc(size*sizeof(BYTE));
j=0;
for(i=0;i<size;i++)
{
//Gray = 0.2126 R + 0.7152 G + 0.0722 B ->
pIm[i] = 0.2216*(float)pV->lpData[j+2]+0.7152*(float)pV->lpData[j+1]+0.0722*(float)pV->lpData[j];
j+=3;
}
j=0;
for(i=0;i<size;i++)
{
pV->lpData[j] = pIm[i];
pV->lpData[j+1] = pIm[i];
pV->lpData[j+2] = pIm[i];
j+=3;
}
free(pIm);
// 建议你自己建个库用来进行图像运算,会方便很多
return true;
}
注册回调函数capSetCallbackOnFrame(m_hWndVideo,myProcessing);
实现一边采集视频,一边灰度化视频每一帧,然后显示,下面是从一个网友那转的灰度化的回调,个人感觉加粗的那句有问题,应该是获得视频每一帧的图像宽和高的乘积,这个m_high和m_width怎么获得??????LRESULT CALLBACK myProcessing(HWND h, LPVIDEOHDR pV)
{
// ====== rgb2gray ========
int i,j,size;
BYTE *pIm;
size = m_high*m_width;
pIm = (BYTE*)malloc(size*sizeof(BYTE));
j=0;
for(i=0;i<size;i++)
{
//Gray = 0.2126 R + 0.7152 G + 0.0722 B ->
pIm[i] = 0.2216*(float)pV->lpData[j+2]+0.7152*(float)pV->lpData[j+1]+0.0722*(float)pV->lpData[j];
j+=3;
}
j=0;
for(i=0;i<size;i++)
{
pV->lpData[j] = pIm[i];
pV->lpData[j+1] = pIm[i];
pV->lpData[j+2] = pIm[i];
j+=3;
}
free(pIm);
// 建议你自己建个库用来进行图像运算,会方便很多
return true;
}
解决方案 »
- 关于VC+EXCEL有关“保存”的问题
- 求教com问题,初始化失败:if (SUCCEEDED(CoCreateInstance(CLSID_UnitsysEditor5, NULL, CLSCTX_INPROC_SERVER,....
- 30分求教高手一个session的问题
- Sendrequest函数的第二个参数该如何来写?
- 主题:怎样得到别的进程中窗口中CListCtrl中的数据?如果控件是CListBox的时候,没有问题。但是CListCtrl却不可
- 进来看看,帮兄弟一把,简单问题
- 关于标签试图的问题,大给分啦
- MFC中如何实现文本向上滚屏。。
- 怎么评价啊
- 打印问题(打印对话框)
- 郁闷,YUV2转RGB后图像颠倒?
- 聊过多线程搜索文件 的思路
我参考的帖子我安照下面过程做,一点击灰度化的按钮,程序就卡死了,怎么回事?
工程名:CapDemo
1.在CapDemoDlg.cpp里建一个全局变量
CCapDemoDlg *pDial;
2.初始化设置
BOOL CCapDemoDlg::OnInitDialog()
{
// TODO: Add extra initialization here
pDial = this;
//以下这些你应该都知道了
hWndC=capCreateCaptureWindow ("CapVideo",WS_CHILD|WS_VISIBLE,10,10,320,240,m_hWnd,0);
capDriverConnect (hWndC,0);
capPreviewRate(hWndC,40);
capPreview(hWndC,TRUE);
CAPSTATUS Cap;
capGetStatus(hWndC,&Cap,sizeof(Cap));
m_high = Cap.uiImageWidth;
m_width = Cap.uiImageHeight;
// 等等...
return TRUE;
}
3.建一个按钮
void CCapDemoDlg::OnButtonRunProcessing()
{
// TODO: Add your control notification handler code here
capSetCallbackOnFrame(hWndC,CCapDemoDlg::myProcessing);
}
4.完成回调函数
LPVOID CALLBACK CCapDemoDlg::myProcessing(HWND h, LPVIDEOHDR pV)
{
// ====== rgb2gray ========
int i,j,size;
BYTE *pIm;
size = pDial->m_high*pDial->m_width;
pIm = (BYTE*)malloc(size*sizeof(BYTE));
j=0;
for(i=0;i<size;i++)
{
//ImGray = 0.114ImR+0.587ImG+0.299ImB
pIm[i] = 0.299*(float)pV->lpData[j+2]+0.587*(float)pV->lpData[j+1]+0.114*(float)pV->lpData[j];
j+=3;
}
j=0;
for(i=0;i<size;i++)
{
pV->lpData[j] = pIm[i];
pV->lpData[j+1] = pIm[i];
pV->lpData[j+2] = pIm[i];
j+=3;
}
free(pIm);
// 建议你自己建个库用来进行图像运算,会方便很多
}
CAPSTATUS Cap;
capGetStatus(hWndC,&Cap,sizeof(Cap));
m_high = Cap.uiImageWidth;
m_width = Cap.uiImageHeight;YUV2转RGB 有以前的帖子
http://topic.csdn.net/u/20120709/11/076dfa88-85bd-49dd-ab9e-16b7fcf8e335.html?seed=2021325937&r=79084628
这个帖子的问题源自视频格式是yuy2,我当成RGB了,所有各种数据存储,转换都出问题了~~现在已经找到问题的起因,正在搞定中,谢谢你的提醒