现在的位置: 首页 > 综合 > 正文

用cvFlip使图像左右翻转

2013年06月19日 ⁄ 综合 ⁄ 共 1629字 ⁄ 字号 评论关闭

cvFlip
垂直,水平或即垂直又水平翻转二维数组

void cvFlip( const CvArr* src, CvArr* dst=NULL, int flip_mode=0);
#define cvMirror cvFlip

src
原数组.
dst
目标责任制数组. 如果 dst = NULL 翻转是在内部替换.
flip_mode
指定怎样去翻转数组。
flip_mode = 0 沿X-轴翻转, flip_mode > 0 (如 1) 沿Y-轴翻转, flip_mode < 0 (如 -1) 沿X-轴和Y-轴翻转.见下面的公式
函数cvFlip 以三种方式之一翻转数组 (行和列下标是以0为基点的):

dst(i,j)=src(rows(src)-i-1,j) if flip_mode = 0
dst(i,j)=src(i,cols(src1)-j-1) if flip_mode > 0

dst(i,j)=src(rows(src)-i-1,cols(src)-j-1) if flip_mode < 0

函数主要使用在:
垂直翻转图像(flip_mode > 0)用于 顶-左和底-左图像结构的转换, 主要用于WIN32系统下的视频操作处理.

水平图像转换,使用连续的水平转换和绝对值差检查垂直轴对称(flip_mode > 0)
水平和垂直同时转换,用于连续的水平转换和绝对真理值差检查中心对称s(flip_mode < 0)

翻转1维指针数组的顺序(flip_mode > 0) 

cvResizeWindow
设定窗口大小

void cvResizeWindow( const char* name, int width, int height );
name
将被设置窗口的名字。
width
新的窗口宽度。
height
新的窗口高度。
函数cvResizeWindow改变窗口的大小。 

(PS:该函数在cvNamdewindow的第二个参数设置为0是才有效)

代码:

// 图像的反转.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include "opencv2/opencv.hpp"

int _tmain(int argc, _TCHAR* argv[])
{
	cvNamedWindow("Flip", 0);
	cvNamedWindow("Src",0);
	/*********************** 
	cvNamedWindow("name", 0);       窗口不会因为图像的大小而改变,图像只能根据窗口的大小而改变
	cvNamedWindow("name", CV_WINDOW_AUTOSIZE);   窗口可以根据图像的实际大小自动调节
	************************/
 //  调整窗口的大小
	cvResizeWindow("Flip", 200, 250);
	cvResizeWindow("Src", 200, 250);

	IplImage* src;
	IplImage* dst;

	src= cvLoadImage("F://Opencv_picture//1.jpg");
	/******************************
	cvLoadImage(filename, 1);   //读取彩色的图像
	cvLoadImage(filename, 0);   //读取强制转化为灰度图的图像
	cvLoadImage(filename, -1);  //读取图像,不做任何处理
	****************************/

	dst= cvCreateImage(cvGetSize(src), src->depth , src->nChannels);

	cvFlip(src, dst, 1);

	cvShowImage("Src", src);
	cvShowImage("Flip", dst);

	cvWaitKey(0);

	cvReleaseImage(&src);
	cvReleaseImage(&dst);
	cvDestroyWindow("Flip");
	cvDestroyWindow("Src");

	return 0;
}

结果图: 左图和右图对称

抱歉!评论已关闭.