PhotoShop算法实现--图像的镜像变换(十六)

本文介绍了Photoshop中实现图像镜像变换的方法,包括水平镜像和垂直镜像的算法原理及具体实现代码。水平镜像是沿图像垂直中轴翻转,而垂直镜像是沿水平中轴翻转。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PhotoShop算法实现--图像的镜像变换(十六)

kezunhai@gmail.com

http://blog.csdn.net/kezunhai

           图像的镜像变换分为水平镜像和垂直镜像。图像的水平镜像是将图像的左半部分和有半部分以图像的垂直中轴线为中心进行对换;图像的垂直镜像则是以图像的上半部分和下半部分的中轴线为中心进行对换。

          对于水平镜像用点(x0, x0)变换后为(widht-x0, y0);对于垂直镜像则有(x0, height-y0)。实现代码如下:

// flag=1:表示水平镜像, flag = -1表示垂直镜像
void PhotoShop:: Mirror(Mat& img, Mat&dst, int flag)
{
	if ( dst.empty())
		dst.create(img.rows, img.cols, img.type());

	int height = img.rows; 
	int width = img.cols;
	int chns = img.channels();

	int i, j;	

	if ( flag == 1)  // 水平镜像
	{
		for ( i=0; i<height; ++i)		
		{
			unsigned char* srcData = (unsigned char*)img.data + img.step* i;
			unsigned char* dstData = (unsigned char*)dst.data + dst.step* i;
			for ( j=0; j<width; ++j)
			{
				dstData[j*chns] = srcData[(width-1-j)*chns];
				dstData[j*chns+1] = srcData[(width-1-j)*chns+1];
				dstData[j*chns+2] = srcData[(width-1-j)*chns+2];
			}
		}
	}
	else  // 垂直镜像
	{
		for ( i=0; i<height; ++i)		
		{
			unsigned char* srcData = (unsigned char*)img.data + img.step* i;
			unsigned char* dstData = (unsigned char*)dst.data + dst.step*(height-1-i);
			for ( j=0; j<width; ++j)
			{
				dstData[j*chns] = srcData[j*chns];
				dstData[j*chns+1] = srcData[j*chns+1];
				dstData[j*chns+2] = srcData[j*chns+2];
			}
		}

	}
	
}
     水平镜像如图所示:

    

        垂直镜像如图所示:


           水平镜像挺好的玩的,再来一张水平镜像:


作者:kezunhai 出处:http://blog.csdn.net/kezunhai 欢迎转载或分享,但请务必声明文章出处。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值