zoukankan      html  css  js  c++  java
  • 重映射及remap()函数介绍

    https://www.cnblogs.com/HL-space/p/10546595.html

    重映射,就是把一幅图像中某位置的像素放置到另一图像指定位置的过程。即:

    在重映射过程中,图像的大小也可以同时发生改变。此时像素与像素之间的关系就不是一一对应关系,因此在重映射过程中,可能会涉及到像素值的插值计算。

    src:输入图像,灰度图或真彩图均可。

    dst:输出图像,要求大小和xmap,ymap相同,通道数目及数据类型和src相同。

    xmap:用于存放图像X方向的映射关系,类型必须是CV_32FC1的。

    ymap:用于存放图像Y方向的映射关系,类型必须是CV_32FC1的。

    interpolation:插值方式。

    borderMode:图像边界处理方式,边界的类型有以下几种:

    1)BORDER_REPLICATE:重复:                 aaaaaa|abcdefgh|hhhhhhh

    2)BORDER_REFLECT:反射:                       fedcba|abcdefgh|hgfedcb

    3)BORDER_REFLECT_101:反射101:         gfedcb|abcdefgh|gfedcba

    4)BORDER_WRAP:外包装:                      cdefgh|abcdefgh|abcdefg

    5)BORDER_CONSTANT:常量复制:          iiiiii|abcdefgh|iiiiiii(i的值由后一个参数Scalar()确定,如Scalar::all(0) )

    borderValue:若上一参数为BORDER_CONSTANT,则由此参数确定补充上去的像素值。可选用默认值。

    二、程序及结果分享

    #include <opencv2/highgui/highgui.hpp>
    #include <opencv2/imgproc/imgproc.hpp>
    #include <iostream>
    
    using namespace std;
    using namespace cv;
    
    int main()
    {
    	Mat mImage = imread("goalkeeper.jpg");
    	if (mImage.data == 0)
    	{
    		cerr << "Image reading error !" << endl;
    		system("pause");
    		return -1;
    	}
    	namedWindow("The original image", WINDOW_NORMAL);
    	imshow("The original image", mImage);
    
    	Mat mResult = mImage.clone();
    	//mMapX和mMapY的数据类型必须是 CV_32FC1
    	Mat mMapX(mImage.rows, mImage.cols, CV_32FC1, Scalar(0));
    	Mat mMapY(mImage.rows, mImage.cols, CV_32FC1, Scalar(0));
    	int Rows = mImage.rows;
    	int Cols = mImage.cols;
    
    	for (int i = 0; i <Rows; i++)
    	{
    		float* ptrX = mMapX.ptr<float>(i);
    		float* ptrY = mMapY.ptr<float>(i);
    		for (int j = 0; j < Cols; j++)
    		{
    			//左右翻转
    			ptrX[j] =(float)(Cols - j);
    			ptrY[j] = (float) i;
    			//上下翻转
    			//ptrX[j] = (float)j;
    			//ptrY[j] = (float)(Rows - i);
    		}
    	}
    
    	remap(mImage, mResult, mMapX, mMapY, INTER_LINEAR);//重映射
    
    	namedWindow("The processed image",WINDOW_NORMAL);
    	imshow("The processed image", mResult);
    	waitKey();
    	destroyAllWindows();
    	return 0;
    }
    

      

  • 相关阅读:
    LayoutInflater作用及使用--自定义EditText,自带清除内容按钮
    SSL backend error when using OpenSSL pycurl install error
    pypyodbc 的坑
    mongo aggregate 删除重复数据
    如何验证代理ip的正确性
    python的非官方的一个下载lib的地方
    rabbitmq web 管理系统的信息
    内存泄漏分析
    readme 语法
    logging dictconfig
  • 原文地址:https://www.cnblogs.com/kekeoutlook/p/13372911.html
Copyright © 2011-2022 走看看