日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

【OpenCV 】Remapping 重映射¶

發布時間:2023/11/27 生活经验 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【OpenCV 】Remapping 重映射¶ 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1.1目標

1.2 理論

1.3 代碼

1.4 運行結果


1.1目標

展示如何使用OpenCV函數 remap 來實現簡單重映射.

1.2 理論

  • 把一個圖像中一個位置的像素放置到另一個圖片指定位置的過程.

  • 為了完成映射過程, 有必要獲得一些插值為非整數像素坐標,因為源圖像與目標圖像的像素坐標不是一一對應的.

  • 我們通過重映射來表達每個像素的位置 :

    這里 是目標圖像, 是源圖像, 是作用于 的映射方法函數.

  • 讓我們來思考一個快速的例子. 想象一下我們有一個圖像 , 我們想滿足下面的條件作重映射:

    會發生什么? 圖像會按照 軸方向發生翻轉. 例如, 源圖像如下:

    看到紅色圈關于 x 的位置改變( 軸水平翻轉):

  • 通過 OpenCV 的函數 remap 提供一個簡單的重映射實現.

?

1.3 代碼

  1. 本程序做什么?

    • 裝載一幅圖像.

    • 程序按秒循環, 在一個窗口中順序出現4種重映射過程對相同的圖像.

    • 等待用戶按 ‘ESC’ 鍵退出程序。

  2. 下面是本教程代碼. 你也可以從 這里 下載。

 #include "opencv2/highgui/highgui.hpp"#include "opencv2/imgproc/imgproc.hpp"#include <iostream>#include <stdio.h>
?using namespace cv;
?/// Global variablesMat src, dst;Mat map_x, map_y;char* remap_window = "Remap demo";int ind = 0;
?/// Function Headersvoid update_map( void );
?/*** @function main*/int main( int argc, char** argv ){/// Load the imagesrc = imread( argv[1], 1 );
?/// Create dst, map_x and map_y with the same size as src:dst.create( src.size(), src.type() );map_x.create( src.size(), CV_32FC1 );map_y.create( src.size(), CV_32FC1 );
?/// Create windownamedWindow( remap_window, CV_WINDOW_AUTOSIZE );
?/// Loopwhile( true ){/// Each 1 sec. Press ESC to exit the programint c = waitKey( 1000 );
?if( (char)c == 27 ){ break; }
?/// Update map_x & map_y. Then apply remapupdate_map();remap( src, dst, map_x, map_y, CV_INTER_LINEAR, BORDER_CONSTANT, Scalar(0,0, 0) );
?/// Display resultsimshow( remap_window, dst );}return 0;}
?/*** @function update_map* @brief Fill the map_x and map_y matrices with 4 types of mappings*/void update_map( void ){ind = ind%4;
?for( int j = 0; j < src.rows; j++ ){ for( int i = 0; i < src.cols; i++ ){switch( ind ){case 0:if( i > src.cols*0.25 && i < src.cols*0.75 && j > src.rows*0.25 && j < src.rows*0.75 ){map_x.at<float>(j,i) = 2*( i - src.cols*0.25 ) + 0.5 ;map_y.at<float>(j,i) = 2*( j - src.rows*0.25 ) + 0.5 ;}else{ map_x.at<float>(j,i) = 0 ;map_y.at<float>(j,i) = 0 ;}break;case 1:map_x.at<float>(j,i) = i ;map_y.at<float>(j,i) = src.rows - j ;break;case 2:map_x.at<float>(j,i) = src.cols - i ;map_y.at<float>(j,i) = j ;break;case 3:map_x.at<float>(j,i) = src.cols - i ;map_y.at<float>(j,i) = src.rows - j ;break;} // end of switch}}ind++;
}

?

1.4 運行結果

?

總結

以上是生活随笔為你收集整理的【OpenCV 】Remapping 重映射¶的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。