用按鍵來進行四種重映射選擇

#define window "[結果圖]"
//

Mat mapx;
Mat mapy;
Mat src;
void get_mapxy(int ch);
int main()
{
	//1.原圖像。
	src = imread("馬車2.jpg");
	resize(src, src, Size(), 0.2, 0.2);
	imshow("效果圖",src);
	//2.準備參數。
	//3.wasd四個按鍵對應四種重映射。
	namedWindow(window);
	
	//3.根據按鍵對mapx和mapy進行賦值。
	mapx.create(src.size(),CV_32FC1);
	mapy.create(src.size(),CV_32FC1);//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxy一定初始化否則會報錯map參數爲空。
	while (1)
	{
		int ch = waitKey(0);
		if (ch == 27)
			break;
		get_mapxy(ch);
        Mat dst(src.size(),src.type());
		remap(src, dst, mapx, mapy, CV_INTER_LINEAR);

	//5.show
	imshow(window,dst);


	}
	
	

	
	
	


	


	waitKey(0);
	return 0;

}

void get_mapxy(int ch)
{
	switch (ch)
	{
	case 'w':
		for (int i = 0; i < src.rows; ++i)
		{
			for (int j = 0; j < src.cols; ++j)
			{
				mapy.at<float>(i, j) = static_cast<float>(src.rows - i);//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx浮點數。
				mapx.at<float>(i, j) = static_cast<float>(j);//xxxxxxxxxxxxxxxxxxxxxxxxxxx注意x,y的的對應關係,點的座標和圖像的at(x,y)是相反的。
			}


		}
		break;
	case 's':
		for (int i = 0; i < src.rows; ++i)
		{
			for (int j = 0; j < src.cols; ++j)
			{
				mapy.at<float>(i, j) = static_cast<float>(src.rows - i);//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx浮點數。
				mapx.at<float>(i, j) = static_cast<float>(src.cols-j);//xxxxxxxxxxxxxxxxxxxxxxxxxxx注意x,y的的對應關係,點的座標和圖像的at(x,y)是相反的。
			}


		}
		break;
	case 'd':
		for (int i = 0; i < src.rows; ++i)
		{
			for (int j = 0; j < src.cols; ++j)
			{
				mapy.at<float>(i, j) = static_cast<float>(i);//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx浮點數。
				mapx.at<float>(i, j) = static_cast<float>(src.cols-j);//xxxxxxxxxxxxxxxxxxxxxxxxxxx注意x,y的的對應關係,點的座標和圖像的at(x,y)是相反的。
			}


		}
		break;
	case 'a'://其實就是縮小原圖,左邊爲現在的座標,右邊爲原圖的座標。結果圖像值顯示0.250.75範圍,而右邊的座標卻可以顯示全部範圍。(0.5-(src.rows-0.5)//這樣更容易理解remap函數中兩個map參數的意義了。
		for (int i = 0; i < src.rows; ++i)
		{
			for (int j = 0; j < src.cols; ++j)
			{
				if (i > src.rows*0.25 && i < src.rows * 0.75&&j>src.cols*0.25&&j<src.cols*0.75)
				{
					mapy.at<float>(i, j) = static_cast<float>(2*(i-src.rows*0.25)+0.5);//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx浮點數。
					mapx.at<float>(i, j) = static_cast<float>(2*(j-src.cols*0.25)+0.5);//xxxxxxxxxxxxxxxxxxxxxxxxxxx注意x,y的的對應關係,點的座標和圖像的at(x,y)是相反的。
				}
				else
				{
					mapy.at<float>(i, j) = 0;
					mapx.at<float>(i, j) = 0;
				}
				
			}


		}
		break;
	}


}

在這裏插入圖片描述
w:
在這裏插入圖片描述
a:
在這裏插入圖片描述
s:
在這裏插入圖片描述
d:
在這裏插入圖片描述

發佈了138 篇原創文章 · 獲贊 5 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章