【VC图像处理】 图像水平镜像,垂直镜像,图像转置

#include "opencv2/core/core.hpp"
#include"opencv2/highgui/highgui.hpp"
#include
#include "iostream"
using namespace std;
using namespace cv;

void OnMirror_X(Mat img,Mat &OutImg)
{
	int Width=img.cols;
	int Height=img.rows;
	OutImg.create(Height,Width,img.type());

	for(int i=0;i(i,j)=img.at(i,Width-j-1);
				OutImg.at(i,(Width-j-1))=img.at(i,j);
			}
			else if(img.channels()==3)
			{
				OutImg.at(i,j)=img.at(i,Width-j-1);
				OutImg.at(i,Width-j-1)=img.at(i,j);
			}
		}
}

void OnMirror_Y(Mat img,Mat &OutImg)
{

	int Width=img.cols;
	int Height=img.rows;
	OutImg.create(Height,Width,img.type());
	for(int i=0;i(i,j)=img.at(Height-i-1,j);  //一开始没加-1  内存老报错!!!~~~  细心啊
				OutImg.at(Height-i-1,j)=img.at(i,j);

			}
			else if(img.channels()==3)
			{
				OutImg.at(i,j)=img.at(Height-i-1,j);
				OutImg.at(Height-i-1,j)=img.at(i,j);
			}
		}}
void Transpose(Mat img,Mat &OutImg) // 图像转置
{
	int Width=img.cols;
	int Height=img.rows;

	OutImg.create(Width,Height,img.type());//注意这里的长、宽

	for(int i=0;i(i,j)=img.at(j,i);
			}
			else if(img.channels()==3)
			{
				OutImg.at(i,j)=img.at(j,i);
			}
		}
}


 
  
void main()
{
	Mat SrcImg=imread("C:\\Users\\Administrator\\Desktop\\工作\\testp\\01.jpg");
	if(!SrcImg.data)
		cout<<"读取图片错误\n";

	Mat ResultImg1,ResultImg2;
	OnMirror_X(SrcImg,ResultImg1);
	OnMirror_Y(SrcImg,ResultImg2);

	imshow("X",ResultImg1);
	imshow("Y",ResultImg2);
	imshow("src",SrcImg);
	waitKey(0);

}

【VC图像处理】 图像水平镜像,垂直镜像,图像转置_第1张图片

你可能感兴趣的:(初步编程,【VC图像处理】)