1. 程式人生 > >(24)畫素重對映

(24)畫素重對映

所謂的畫素重對映就是:我們對原圖的每一個畫素值進行提取,然後經過一個函式變換,對映到我們空白的目標圖片上,就得到一張新的圖片,這個就是畫素重對映。具體的基礎知識,看這個部落格:https://blog.csdn.net/qq_41167777/article/details/84947439

===========================

 

下面這個程式碼執行,有好幾種結果,主要就是,你按下 1,2,3,0,等等,會出現不同的圖片展示。

 

===============================

 1 #include <opencv2/opencv.hpp>
 2
#include <iostream> 3 using namespace std; 4 using namespace cv; 5 6 Mat src, dst, map_x, map_y; 7 const char* input_win = "input"; 8 int index = 0; 9 const char* out_put = "hough-line-detection"; 10 void update_map(void); 11 int main(int agrc, char** agrv) { 12 src = imread("C:\\Users\\32829\\Desktop\\111.jpg
"); 13 if (!src.data) { 14 printf("no load..\n"); 15 return -1; 16 } 17 namedWindow(input_win, CV_WINDOW_AUTOSIZE); 18 namedWindow(out_put, CV_WINDOW_AUTOSIZE); 19 imshow(input_win, src); 20 map_x.create(src.size(), CV_32FC1); 21 map_y.create(src.size(), CV_32FC1);
22 int c = 0; 23 while (true) { 24 c = waitKey(500); 25 if ((char)c == 27) { 26 break; 27 } 28 index = c % 4; 29 update_map(); 30 remap(src, dst, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0, 255, 255)); 31 imshow(out_put, dst); 32 } 33 } 34 void update_map(void) { 35 for (int row = 0; row < src.rows; row++) { 36 for (int col = 0; col < src.cols; col++) { 37 switch (index) { 38 case 0: 39 if (col > (src.cols*0.25) && col<(src.cols*0.75) && row>(src.rows*0.25) && row < (src.rows*0.75)) { 40 map_x.at<float>(row, col) = 2 * (col - (src.cols*0.25)); 41 map_y.at<float>(row, col) = 2 * (row - (src.rows*0.25)); 42 } 43 else { 44 map_x.at<float>(row, col) = 0; 45 map_y.at<float>(row, col) = 0; 46 } 47 break; 48 case 1: 49 map_x.at<float>(row, col) = (src.cols - col - 1); 50 map_y.at<float>(row, col) = row; 51 break; 52 case 2: 53 map_x.at<float>(row, col) = col; 54 map_y.at<float>(row, col) = (src.rows - row - 1); 55 break; 56 case 3: 57 map_x.at<float>(row, col) = (src.cols - col - 1); 58 map_y.at<float>(row, col) = (src.rows - row - 1); 59 break; 60 } 61 } 62 } 63 }