您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么使用opencv實現圖像平移”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
圖像平移指的是沿水平方向或垂直方向進行圖像的移動。
平移變換公式:
對于原始圖像而言,正變換矩陣:
對于目標圖像而言,逆變換矩陣:
代碼:
#include<opencv2/imgproc.hpp> #include<opencv2/highgui.hpp> #include<opencv2/core.hpp> #include<iostream> #include<stdlib.h> using namespace std; using namespace cv; Mat imgTranslation1(Mat& src, int xOffset, int yOffset); Mat imgTranslation2(Mat& src, int xOffset, int yOffset); int main() { Mat src = imread("C:\\Users\\H\\Desktop\\niao.bmp"); if (src.empty()) { cout << "請檢查圖像是否存在..." << endl; return -1; } pyrDown(src, src); cout << "原圖尺寸\trows:" << src.rows << "\tcols: " << src.cols << endl; int xOffset = 50, yOffset = 80; Mat dst1 = imgTranslation1(src, xOffset, yOffset); imshow("dst1", dst1); cout << "平移不改變尺寸\trows: " << dst1.rows << "\tcols: " << dst1.cols << endl; Mat dst2 = imgTranslation2(src, xOffset, yOffset); imshow("dst2", dst2); cout << "平移改變尺寸\trows: " << dst2.rows << "\tcols: " << dst2.cols << endl; waitKey(0); system("pause"); return 0; } 圖像的平移 ,大小不變 Mat imgTranslation1(Mat& src, int xOffset, int yOffset) { int nrows = src.rows; int ncols = src.cols; Mat dst(src.size(), src.type()); for (int i = 0; i < nrows; i++) { for (int j = 0; j < ncols; j++) { 映射變換 int x = j - xOffset; int y = i - yOffset; 邊界判斷 if (x >= 0 && y >= 0 && x < ncols && y < nrows) { dst.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x]; } } } return dst; } //圖像平移大小改變 Mat imgTranslation2(Mat& src, int xOffset, int yOffset) { int nrows = src.rows + abs(yOffset); int ncols = src.cols + abs(xOffset); Mat dst(nrows, ncols, src.type()); for (int i = 0; i < nrows; i++) { for (int j = 0; j < ncols; j++) { int x = j - xOffset; int y = i - yOffset; if (x >= 0 && y >= 0 && x < ncols && y < nrows) { dst.at<Vec3b>(i, j) = src.ptr<Vec3b>(y)[x]; } } } return dst; }
結果展示:
“怎么使用opencv實現圖像平移”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。