使用OpenCv获取摄像头图像并进行旋转操作

使用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);
原图:

使用OpenCv获取摄像头图像并进行旋转操作_第1张图片


右旋转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);

效果:

使用OpenCv获取摄像头图像并进行旋转操作_第2张图片

因为我把长宽绑定了画图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

你可能感兴趣的:(MFC程序,MFC,opencv,摄像头)