DirectShowはわからんが、ざっと見た感じだと
imgのサイズがsz-1なのに、GetCurrentImageの第一引数(バッファサイズ)でsz*4と4倍してるのがよーわからん

IBasicVideoについては、ここでも解説してるな
http://www.geekpage.jp/programming/directshow/getcurrentimage.php
> バッファサイズを取得するために第二引数をNULLで渡します。
> 第二引数がNULLの場合、第一引数に必要なバッファサイズが
> 格納されて返されます。
って書いてあるし、一度nullを渡してバッファサイズを確認してみたらどうだろうか?


ただ、画像キャプチャならOpenCVのほうがずっと楽だな
DirectShowの.NETはMSすら投げだすくらいだし、OpenCVで作り直しといたほうが後々楽

てか、俺がDirectShowラッパー使おうとして挫折したwww