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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OpenCV中重映射

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OpenCV中重映射 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

OpenCV中圖像重映射

重映射的意思是:把一個圖像中一個位置的像素放置到另一個圖片指定位置的過程。新圖像g(x,y)g(x,y)g(xy)與原圖像f(x,y)f(x,y)f(xy)存在一個映射的關系。
例如:
f(x,y)→g(x,y)f(x,y)\to g(x,y)f(xy)g(x,y)
假設對應法則為:h(x,y)=(I.cols?x,y)\color{#f00}h(x,y) = (I.cols-x,y)h(xy)=(I.cols?x,y)
那么變換后的圖像就是原圖像的左右反轉。從對應法則可以看出,y值是保持不變的,即圖像的行保持不變,列逆序排列。

remap(輸入圖像,輸出圖像,Mat x方向的映射矩陣Mat y方向的映射矩陣CV_INTER_LINEAR非整數像素坐標的插值標志BORDER_CONSTANT );

關于兩個映射矩陣:
假設原圖相為:
[123456789]\begin{bmatrix} 1&2&3\\4&5&6\\7&8&9 \end{bmatrix}???147?258?369????
?左右反轉\Downarrow左右反轉?
mapx[321321321]andmapy[000111222]map_x\begin{bmatrix}3&2&1\\3&2&1\\3&2&1\end{bmatrix} and\ map_y \begin{bmatrix}0&0&0\\1&1&1\\2&2&2 \end{bmatrix}mapx????333?222?111????and?mapy????012?012?012????

[123456789]\begin{bmatrix} 1&2&3\\4&5&6\\7&8&9 \end{bmatrix}???147?258?369????
?上下反轉\Downarrow上下反轉?
mapx[012012012]andmapy[333222111]map_x\begin{bmatrix}0&1&2\\0&1&2\\0&1&2\end{bmatrix} and\ map_y \begin{bmatrix}3&3&3\\2&2&2\\1&1&1 \end{bmatrix}mapx????000?111?222????and?mapy????321?321?321????
可以對照著代碼,體會一下:

#include "opencv2/opencv.hpp" #include <math.h>using namespace cv; using namespace std;Mat Remap_hand(const Mat src); void Remap_api(const Mat src);Mat map_x,map_y;int main(int argc, char *argv[]) {Mat src,dst;src = imread("/home/dynamicw/Project/C++_Project/opencvtest/src/day03/dog.jpg");imshow("src",src);map_x.create(src.size(),CV_32FC1);map_y.create(src.size(),CV_32FC1);imshow("hand",Remap_hand(src));while(true){int c = waitKey(1000);//提供一個1000毫秒循環一次的循環cout << "hello" << endl;Remap_api(src);remap(src,dst,map_x,map_y,CV_INTER_LINEAR,BORDER_CONSTANT,Scalar(0,0,0));imshow("api",dst);}return 0; }Mat Remap_hand(const Mat src) {Mat temp;src.copyTo(temp);for(int row = 0;row < src.rows;row++){for(int col = 0;col < src.cols;col++){temp.at<Vec3b>(row,col) = src.at<Vec3b>(row,abs(col-src.cols));}}return temp; }void Remap_api(const Mat src) { for(int row = 0;row < src.rows;row++){for(int col = 0;col < src.cols;col++){//左右反轉// map_x.at<float>(row,col) = src.cols - col;// map_y.at<float>(row,col) = row;//上下反轉//map_x.at<float>(row,col) = col;//map_y.at<float>(row,col) = src.rows - row;//上下左右反轉map_x.at<float>(row,col) = src.cols - col;map_y.at<float>(row,col) = src.rows - row;}} }

總結

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

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