用OpenCV实现图像的水平镜像变换(翻转)、竖直镜像变换(翻转)(又叫垂直镜像变换)的C/C++源码

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

本文参考博文 https://www.cnblogs.com/wangguchangqing/p/4039095.html 

本文向大家提供三个源码,分别为:

①基于OpenCV1.x写的水平镜像变换C源码

②基于OpenCV1.x写的竖直镜像变换C源码

③基于OpenCV2.x写的包含水平翻转、垂直翻转、同时进行垂直和水平翻转的C++源码。

①基于OpenCV1.x写的水平镜像变换C源码(不使用MAT类)::

源码中用到的图像下载链接:https://pan.baidu.com/s/1bo5zC2F

#include <opencv2/opencv.hpp>  
#include <opencv2/legacy/compat.hpp> 
#include <fstream>
using namespace std;  
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")  

void mirror_horizontally_image(IplImage *src,IplImage *dst) //实现水平镜像变换
{
	int M,N;
	M=src->height;
	N=src->width;

	int i=0,j=0;

	double temp1;

	CvScalar s1;

	for(i=0;i<M;i++)
	{
		for(j=0;j<N;j++)
		{
			temp1 = cvGet2D(src,i,N-1-j).val[0];
			s1.val[0]=temp1;
			cvSet2D(dst,i,j,s1);

		}
	}

}

int main()
{

	IplImage *pSrcImage = cvLoadImage("lena_gray.png", CV_LOAD_IMAGE_UNCHANGED);  
	IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);

	mirror_horizontally_image(pSrcImage,pOutImage);

	const char *pstrWindowsATitle = "原图";  
	const char *pstrWindowsBTitle = "变换后的图"; 
	//创建窗口      
	cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE);      
	cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE);
	//在指定窗口中显示图像      
	cvShowImage(pstrWindowsATitle, pSrcImage);    
	cvShowImage(pstrWindowsBTitle, pOutImage);    
	//等待按键事件      
	cvWaitKey();      
	cvDestroyWindow(pstrWindowsATitle);  
	cvDestroyWindow(pstrWindowsBTitle); 
	cvReleaseImage(&pSrcImage);  
	cvReleaseImage(&pOutImage);    
	


return 0;
}

②基于OpenCV1.x写的竖直镜像变换C源码(不使用MAT类):

源码中用到的图像下载链接:https://pan.baidu.com/s/1bo5zC2F

#include <opencv2/opencv.hpp>  
#include <opencv2/legacy/compat.hpp> 
#include <fstream>
using namespace std;  
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"")  

void mirror_vertically_image(IplImage *src,IplImage *dst) //实现竖直镜像变换
{
	int M,N;
	M=src->height;
	N=src->width;

	int i=0,j=0;

	double temp1;

	CvScalar s1;

	for(i=0;i<N;i++)
	{
		for(j=0;j<M;j++)
		{
			temp1 = cvGet2D(src,N-1-j,i).val[0];
			s1.val[0]=temp1;
			cvSet2D(dst,j,i,s1);

		}
	}

}

int main()
{

	IplImage *pSrcImage = cvLoadImage("lena_gray.png", CV_LOAD_IMAGE_UNCHANGED);  
	IplImage *pOutImage = cvCreateImage(cvGetSize(pSrcImage), IPL_DEPTH_8U,1);

	mirror_vertically_image(pSrcImage,pOutImage);

	const char *pstrWindowsATitle = "原图";  
	const char *pstrWindowsBTitle = "变换后的图"; 
	//创建窗口      
	cvNamedWindow(pstrWindowsATitle, CV_WINDOW_AUTOSIZE);      
	cvNamedWindow(pstrWindowsBTitle, CV_WINDOW_AUTOSIZE);
	//在指定窗口中显示图像      
	cvShowImage(pstrWindowsATitle, pSrcImage);    
	cvShowImage(pstrWindowsBTitle, pOutImage);    
	//等待按键事件      
	cvWaitKey();      
	cvDestroyWindow(pstrWindowsATitle);  
	cvDestroyWindow(pstrWindowsBTitle); 
	cvReleaseImage(&pSrcImage);  
	cvReleaseImage(&pOutImage);    
	


return 0;
}

运行结果如下图所示:

③基于OpenCV2.x写的包含水平翻转、垂直翻转、同时进行垂直和水平翻转的C++源码(使用MAT类)

代码中用到的图像下载链接 http://pan.baidu.com/s/1dFv2MM9 

//OpenCV版本2.4.9    
//交流QQ2487872782   
  
#include <opencv2/core/core.hpp>            
#include <opencv2/highgui/highgui.hpp>     
#include <opencv2/imgproc/imgproc.hpp>  
  
int main()    
{    
    cv::Mat srcImage = cv::imread("pool.jpg");     
    if(!srcImage.data)     
        return -1;    

    // 水平翻转
	cv::Mat resultImage2;
	cv::flip(srcImage, resultImage2, 1); 
	// 垂直翻转
	cv::Mat resultImage3;
	cv::flip(srcImage, resultImage3, 0);
	// 垂直和水平翻转
	cv::Mat resultImage4;
	cv::flip(srcImage, resultImage4, -1);

    cv::imshow("srcImage", srcImage);   
    cv::imshow("水平翻转后的图像", resultImage2); 
	cv::imshow("垂直翻转后的图像", resultImage3);  
	cv::imshow("垂直和水平翻转后的图像", resultImage4);  
    cv::waitKey(0);    
    return 0;    
  
}    

运行结果如下图所示:

图像处理开发需求、图像处理接私活挣零花钱,请加微信/QQ 2487872782
图像处理开发资料、图像处理技术交流请加QQ群,群号 271891601

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值