使用cvQueryFrame进行获取图像之后在进行flip()操作 可以实现90° 180° 270° 的旋转。也就是说可以实现90度全方位旋转了。
transpose是转置 效果就是 翻转+右旋90度。
然后根据flip来接着转。算好角度之后就可以实现你想要的效果。
缺点嘛,就是最小单位是90度...
flip(mat,mat,int)
第三个参数:1左右翻
0 上下翻
-1 对角翻
示例如下:
头文件 cv.h cvvImage.h
命名空间 usingnamespace cv;
//获取图像
IplImage* m_Frame;
m_Frame=cvQueryFrame(pThis->m_picCapture);
原图:
右旋转90度:
Mat src=m_Frame;
Mat dst;//参考系
transpose(src, dst);//对置翻转(放平睡倒)
flip(dst, src,1);//1 水平反转 (左右)
IplImage srccopy; //下面进行格式转换以便画到DC上
srccopy=src;
m_Frame=cvCloneImage(&srccopy);
CvvImage m_CvvImage;
m_CvvImage.CopyOf(m_Frame,1);
CRect temp(0, 0, pThis->m_picRect.Width(), pThis->m_picRect.Height());
m_CvvImage.DrawToHDC(pThis->m_pichDc, &temp);
效果:
因为我把长宽绑定了画图rect的长宽所以会有拉伸。想不拉伸直接获取图片长宽就好。
下面是180 270的旋转。就不上图了。原理很简单。
180:
Mat src=m_Frame;
Mat dst;//参考系
transpose(src, dst);
flip(dst, src,-1);// -1 对角反转
transpose(src, src);//因为transpose之后是反转+90度 -1是 反转+90度 所以再来个transpose就是在反转再来90 就是相当于转180度了。
270:(左旋90)
Mat src=m_Frame;
Mat dst;//参考系
transpose(src, dst);
flip(dst, src,0);// 0 上下翻转
如有错误请多多指教!
BY csdn:PepperEggFriedRice 2016.12
PepperEggFriedRice