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

VC+DirectShow对视频进行图片处理之四

 2007-03-15 21:48:55 来源:WEB开发网   
核心提示: MMX 最大的好处是可以自动保证处理的值范围为0 ~ 255,节省判断,VC+DirectShow对视频进行图片处理之四(4),而且MMX寄存器是64位的,一次可处理32bit图像的两个点,即第一点白点的在图中位置(x,y),其它的我也不太懂,您可参考相关资料

MMX 最大的好处是可以自动保证处理的值范围为0 ~ 255,节省判断,而且MMX寄存器是64位的,一次可处理32bit图像的两个点。其它的我也不太懂,您可参考相关资料。

下面列出浮雕效果代码,它是减去右边点的,由于不进行行列判断,每行最后一点减去的是下一行的首点。

__int64 Mask = 0x8080808080808080; // 0x80 = 128,就是亮度的增加值
UINT a = bmpBufferLen >> 3; // 缓冲区长度(按 BYTE 计算)除以 8(两个点的大小),计算要循环的次数
_asm{
mov esi,pIn; // 要处理的缓冲区指针
mov edi,pOut; // 结果缓冲区指针
mov eax,a; // 循环次数
dec eax; // 循环次数减一,因为最后两点没法减,可以在后面特殊处理,这里不作处理
movq mm1,Mask; // 增加值,movq 是 MMX 的专用汇编指令,请找资料看
_loop: // 循环
mov ecx,esi; // ecx 存储右边点的指针
add ecx,4; // 只加 4 就跳过一点到右边点了
movq mm0,[esi]; // 移动要处理的两点的值到 MMX 寄存器
movq mm2,[ecx]; // 移右边两点的值
psubusb mm0,mm2; // 相减
paddusb mm0,mm1; // 加上增加值
movq [edi],mm0; // 移到结果缓冲区
add esi,8; // 移动到下两点
add edi,8; // 同上
dec eax; // 循环计数减一
jnz _loop; // 不为零就继续循环
emms; // 结束 MMX 使用
}

7. 来点高级的,用摄像头控制鼠标!

看着这个有点神奇吧,其实比什么都要简单。先做好"硬件准备":把摄像头如图摆放,镜头下方放张白纸以使图像中物体界限分明。

软件方面,把图片作阀值处理-- B 值大于 128 的设为黑色,其它的设为白色。因为白纸的作用,您的手或其他物体会在阀值图中显示为白色,如图,再找出图中红点,即第一点白点的在图中位置(x,y),再把图的坐标影射到屏幕坐标就行了。

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

Tags:VC DirectShow 视频

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