有關opencv的學習(5)—圖像的重映射

在之前的操作中,如加入椒鹽噪聲或是對圖像進行銳化操作,都讀取和修改了圖像的像素值。圖像的重映射是通過移動像素修改圖像的外觀。這個過程不會修改圖像值,而是把每個像素的位置重新映射到新的位置。可以用來創建圖像特效,或者修正因鏡片等原因導致的圖像扭曲。

使用OPENCV的remap函數,首先,定義在重映射處理中使用的映射參數,然後把映射參數應用到輸入圖像。以下定義一個轉換函數,在圖像上創建波浪形的效果。

代碼如下:

#include <iostream>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

//重映射圖像,創建波浪形效果
void wave(const Mat &image,Mat &result)
{
    //映射參數
    Mat srcX(image.rows,image.cols,CV_32F);//x方向
    Mat srcY(image.rows,image.cols,CV_32F);//y方向
    
    //創建映射參數
    for(int i=0;i<image.rows;i++)
    {
        for(int j=0;j<image.cols;j++)
        {
            //(i,j)像素的新位置
            srcX.at<float>(i,j)=j;//
            //原來在第j行的元素,現在根據一個正弦曲線移動
            srcY.at<float>(i,j)=i+4*sin(j/10.0);
        }
        
    }
    //應用映射參數
    remap(image, result, srcX, srcY, INTER_LINEAR);
}



int main( )
{
    Mat image=imread("/Users/zhangxiaoyu/Desktop/2.png");
    if(image.empty())
  {
     cout<<"Error!cannot be read...../n";
     return -1;
    }
    
    Mat result;
    wave(image, result);
    namedWindow("result");
    imshow("result", result);
    waitKey(0);
    
}

結果顯示如下:


原始圖片如下所示:



發佈了26 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章