一 學習內容
1 圖像映射
1.1 圖像映射---映射到不同的座標位置(例如:圖像上下對稱、左右對稱、對角線對稱、縮小等)
1.2 關於映射表的設置:值爲映射後的座標位置
二 代碼調試
#include <opencv2/opencv.hpp>
#include <iostream>
#include <math.h>
using namespace cv;
using namespace std;
Mat src,map_x, map_y,dst_remap;
char Figure1[] = "Figure1";
char Figure2_remap[] = "Figure2_remap";
char Figure3_remap[] = "Figure3_remap";
char Figure4_remap[] = "Figure4_remap";
char Figure5_remap[] = "Figure5_remap";
char Figure6_remap[] = "Figure6_remap";
void ZL_remap(void);
int index = 0;//設置索引,用於獲得不同條件下的映射表
int main() {
//Mat src;
src = imread("e:/2 opencv_projects_zl/Hua5.jpg");
if (!src.data) {
printf("Load Error...\n");
return -1;
}
namedWindow(Figure1,CV_WINDOW_AUTOSIZE);
imshow(Figure1,src);
//學習新內容:圖像映射---映射到不同的座標位置(例如:圖像上下對稱、左右對稱、對角線對稱、縮小等)
//1. 設置映射表
map_x.create(src.size(),CV_32FC1);//x座標映射表,值爲映射後的座標位置
map_y.create(src.size(), CV_32FC1);//y座標映射表,值爲映射後的座標位置
//2. 調用函數:根據設置的映射表,完成圖像映射
int c = 0;//鍵盤輸入
namedWindow(Figure2_remap, CV_WINDOW_AUTOSIZE);
while (true) {
c = waitKey(500);
if ((char) c == 27) {
break;
}
index = c % 4;
ZL_remap();
remap(src, dst_remap,map_x,map_y,INTER_LINEAR,BORDER_CONSTANT,Scalar(100,100,200));
imshow(Figure2_remap, dst_remap);
}
//waitKey(0);
return 0;
}
void ZL_remap(void) {
for (int row = 0; row < src.rows; row++)
{
for (int col = 0; col < src.cols; col++)
{
//1.5 設置索引,用於獲得不同條件下的映射表
switch (index)
{
case 0:
if (col > (0.25 * src.cols) && col < (0.75 * src.cols) && row>(0.25 * src.rows) && row < (0.75 * src.rows)) {
map_x.at<float>(row, col) = 2 * (col - (src.cols *0.25) + 0.25);
map_y.at<float>(row, col) = 2 * (row - (src.rows *0.25) + 0.25);
}
else {
map_x.at<float>(row, col) = 0;
map_y.at<float>(row, col) = 0;
}
break;//一定要加上這個,要不然按鍵之後,圖像不更新
case 1:
map_x.at<float>(row, col) = src.cols-1 - col;
map_y.at<float>(row, col) = src.rows-1 - row;
break;//一定要加上這個,要不然按鍵之後,圖像不更新
case 2:
map_x.at<float>(row, col) = src.cols - 1 - col;
map_y.at<float>(row, col) = row;
break;//一定要加上這個,要不然按鍵之後,圖像不更新
case 3:
map_x.at<float>(row, col) = col;
map_y.at<float>(row, col) = src.rows - 1 - row;
break;//一定要加上這個,要不然按鍵之後,圖像不更新
//default:
//break;
}
}
}
}
三 調試結果